首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

想问一个关于全屏幕动画效率的有关问题

2013-07-08 
想问一个关于全屏幕动画效率的问题这段时间我在写一个图形动画引擎,是基于GDI来写的,但是感觉效果不是很好

想问一个关于全屏幕动画效率的问题
这段时间我在写一个图形动画引擎,是基于GDI来写的,但是感觉效果不是很好。我的这个引擎实现的方式大致是这样的。我创建了一个GDI设备(包括位图、刷子、字体什么的都设置好了),然后自己加载了几个位图数据到内存(这里的内存是指一个结构体数组,结构体包含图形资源的宽度、高度、具体符合GDI数据规范的数据指针等)。然后再添加图层(也是一个结构体数组),结构体包含图层的坐标、宽度、资源指针等。因为想引擎支持透明和半透明的资源,所以位图资源都采用32位的位图作为基础,分别是R、G、B、透明度这样的结构。因为涉及到运算,所以我就创建了一块与GDI设备数据大小相符的内存区域来实现这种图形运算,然后再用 SetBitmapBits 把处理好的内存数据设置到位图,然后再用Bitblt刷到窗口中。
我用了一个线程来专门轮询内存像素的每一个点,合并识别底图、以及每一个图层的数据,然后还用了一个线程来刷图。虽然最终效果是可以实现了,但是感觉速度上不能满足我的需求。在800*600的分辨率下,效果勉强可以接受,但在1366*768的情况下,动画效果就会很差,会卡。后来我就改了一下,采用了30个线程分块区运算,6*5个块区,虽然速度有所提升,但动画效果会根据块区线程的速度而脱节。之后我又改成了隔行扫描的方式,用了两个线程,一个处理单行数据,一个处理双行数据,效果还可以,速度上来一点,不过当动起来的时候,会有一条一条的扫描线影子。还有,我的程序是用VC写的,理论上循环运算效率应该是很快了的呀。
我想问一下,在这种全屏图形,有多个支持透明度调整的图层环境,用GDI作为基础,怎样才能更好的处理效果和效率方面呢? 想问一个关于全屏幕动画效率的有关问题想问一个关于全屏幕动画效率的有关问题
[解决办法]
那样性能就不能要求太高,毕竟 GDI+ 可以调用硬件实现的。

我也觉得用DirectX吧.

毕竟GDI+多数是靠CPU,而DirectX却是由显卡来处理的,CPU与GPU在干图像处理方面硬件上就有天生的区别...
[解决办法]
你看现在游行的DirectUI,本质上就是用显卡来处理图像,相当于实现了一个DirectX版本的GDI+.

QQ那么多的图片量,在静态工作时CPU占用可以低到1%左右(我的CPU是N970/4核/2.2G)

而且QQ做了深度封装,可以直接利用XML来进行界面管理,使用与开发也方便了.
[解决办法]
这个不知道了.....我猜测,DX的API应该也和GDI+一样吧,只不过最终一个是用GPU执行,一个是用CPU执行.....

这要问问对DX熟的哥们想问一个关于全屏幕动画效率的有关问题
------解决方案--------------------


多页缓存,画第一页的时候至少缓存2页以上
另加隔行贴图,只要帧速上来效果应该问题不大
[解决办法]
应该说GPU尚未在驱动级得到统一,只能在引擎级降低硬件差异性。
GPU高性能计算的前世今生
[解决办法]
VC++采用OpenGL编程比较合适。
[解决办法]
处理图象有GPU不用非要用CPU?!
[解决办法]
提醒:动画效率再高,全屏白和全屏黑交替显示也会闪!

热点排行