优化HGE绘图算法成功了

  HGE的核心绘图算法真是问题多多
  大家有没有发现HGE绘图的时候是很有问题的。

  每画一张图片,就需要从系统内存复制一次数据,最关键的不是数据复制的问题,而是每一次都需要LOCK锁定一次顶点缓冲区进行数据更新。锁定的时候不使用任何标记,那么就强制GPU和CPU同步,带来的是渲染延迟问题。

  最要命的是每一帧都进行从系统内存——显卡内存的操作,如果是网络游戏,每一帧都画上千张以上的图片和阿尔法混合,结果会出现什么??本来顶点缓冲区里面既然已经存在数据,那么在几帧之内,如果数据是不需要更新,就完全可以直接从顶点缓冲区里面读取数据进行绘图。那么这些是GPU的事情,而CPU只是做了很短时间的操作。这种方式才是最合理的。而且我估计所有大型的网络游戏都是采用这种处理方式。根本不可能像HGE那样每一帧的操作。小型游戏是没有所谓的。大型游戏肯定不行。

所以如果不修改绘图算法,直接采用HGE原来的算法进行游戏开发,那么在大量的图片在每一帧里面进行绘图的时候,肯定会出现各种延迟现象和资源占用的问题。
  (关于顶点缓冲区锁定操作等问题,网上关于D3D编程的资料非常多,如果不了解这些基础的话,就很难理解了)
 
缓存——真正的意义是保存数据。这些对于有编程经验的人来说,很容易明白它的意义,并且得到极大的利用这些缓存的好处。尤其是显卡内存的缓存,对于存储在里面的数据,肯定得到更快的渲染。
 
  而HGE原来的绘图算法,完全没有发挥顶点缓冲区和索引缓冲区的效能。就好像每一次都从系统内存复制入图片,而没有发挥显卡内存资源池的效能那样。如果像大型的3D网络游戏那样采用这种算法的话,每一次都从系统内存复制入万级面数量的数据甚至是亿以上的数据,(一个人物模型最少2000——3000面,采用索引缓冲区,一个面最少4个顶点),那样不死机才怪。

  今晚刚刚修改完绘图算法。
基本上,在游戏里面我们是不需要每一帧都更新数据的。如果人物跑动需要每一帧都更新的话,那么一秒的时间内,需要绘制多少个画面,这个人可能不是在跑,而是在飞了。所以无论是人物移动或者释放魔法攻击这些变化都需要在某个时段内才更新不同的画面。就是说,大部分时间内(毫秒级),绘制的画面是相同的。这些相同的数据显然只需要GPU读取缓冲区原来的数据而直接绘制就行,不再需要从系统内存再锁定复制数据。只有发出更新的命令后,才需要重新更新缓冲区的内容。这段时间内,CPU完全可以做其它逻辑上面的处理,这样下一次需要更新的内容就提前做好了。等到更新的时间到了,再一次性复制到缓冲区里面,之后就由GPU来操作了。
 
  绘图算法没有采用HGE原来的架构,而是重新写了渲染和逻辑添加数据函数,图片绘制成功。只需要再细化优化一下就可以大量地批量渲染各种图片数据了。
  目前图片格式还是PNG的,这种格式的图片压缩空间已经不大。迟些再试试TGA格式的图片,这种图片是带通道的。DDS图片格式虽然可以具有很大的压缩比,只是颜色失真也很厉害。BMP和JPG完全不需要考虑。

转载于:https://www.cnblogs.com/GameDelphi/archive/2012/03/13/2394717.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ※※※※ LEGEND for HGE绘图版本 更新日期:2019-01-31 ※※※※※※※※※※※※※※※※※※※※ ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ ※※※※ 注意:本次由于扩展数据类型,正在开区的请勿直接替换否则会导致数据混乱! ※※※※※※※ ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ ※※※※ Development QQ:8302775 LEGEND开发群:715347659 ※※※※※※※※※※※※※※※※※※ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1.解决小退会不定时黑屏,有时时间长有时时间段黑屏后与服务器彻底失去连接. 2.小退弹出对话框时CPU使用率会暴涨. 3.优化内核内存不释放问题. 4.修改内核字体改为微妙字体,支持繁体字和特殊符号. 5.修复人物死亡灰度,99%接近盛大的颜色. 6.修复行会功能不能使用的问题. 7.修复游戏命令打不开的功能. 8.完善六个经络界面点击不变换的问题. 9.修复查看别人装备栏显示错误. 10.解决发送屏幕公告时内存泄露导致小腿黑屏. 11.修复切换窗口和全屏时地图变黑. 12.修复WIN XP下查看物品属性时窗口花屏的问题. 13.修复六格英雄内功页树状选择文字显示混乱. 14.修改选择Edit框复制粘贴时默认文字为绿色. 15.取消数字显血显示人物等级功能,因为此功能查看别人时显示为0级. 16.重新整理客户端GUI输出,并完善绘图无法调试{源码问题,与程序无关}. 17.修复六格界面英雄状态栏从基础切换内功时字体全部变化的问题. 18.优化连击内存释放时间,减少物理内存的使用率. 19.自动寻路功能使用说明:打开小地图,用鼠标滑轮再小地图选择坐标就自动开始移动了. 20.修复聚灵珠有一颗再背包满经验,其它空的也会跟着自动满的BUG. 21.修复摆摊时选择购买物品时鼠标点下没有效果. 22.M2添加重新加载【交易NPC管理、管理NPC、刷怪配置、怪物爆率】功能. 23.修复自动寻路小地图不显示绿色的寻路标记. 24.修复操作栏底部缺少一条像素移动时会出现漏光现象. 25.解决小地图移动到物品上面时被物品名字覆盖的问题. 26.请使用配套IPLocal.dll和qqwry.dat不然获取IP会出乱码. 27.修复返回角色选择页面时小地图依然开启问题. 28.M2添加心灵召唤功能,宝宝离开主人后重新按技能键即可召唤回来. 29.修复客户端武器和衣服自定义素材不显示的问题. 30.M2扩展英雄穿戴触发功能H.TakeOn和H.TakeOff. ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 名称: 主体和英雄穿取装备触发脚本 功能:    穿上装备、取下装备时触发脚本 介绍:    脚本写在QFunction-0.txt中. 主体触发要对应标签为[@TakeOnX]、[@TakeOffX].其中X(0-12)是装备位置.在[@TakeOffX]中.可以检测该位置当前装备(也就是要取下的装备).在[@TakeOnX]中.可以检测到新戴上的装备 英雄触发要对应标签为[@H.TakeOnX]、[@H.TakeOffX].其中X(0-12)是装备位置.在[@H.TakeOffX]中.可以检测该位置当前装备(也就是要取下的装备).在[@H.TakeOnX]中.可以检测到新戴上的装备 装备位置说明:服装=0,武器=1,勋章=2,项链=3,头盔=4,左手镯=5,右手镯=6,左戒指=7,右戒指=8,护符=9,腰带=10,鞋子=11,宝石=12 脚本实例: ;========================================== [@TakeOn1] #If checkitemw 炼狱 1 #Act SendMsg 5 [主体]:戴上了炼狱威力无穷! ;========================================== ;========================================== [@TakeOff1] #If checkitemw 炼狱 1 #Act SendMsg 5 [主体]:炼狱取下来,你

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值