directdraw overlay 和flip及blt的区别

该文转自:

http://hi.baidu.com/coolzdp/blog/item/0b4fcc1b08fda8fdae5133f7.html

(1)为什么需要overlay:

为什么需要overlay? overlay产生的原因是:1,避免在vertical blank时flip/blt surface造成的画面"撕 裂"现象; 2,使硬件可以窗口模式下使用flip而不是blt,从而提高效率. 3D游戏里面它没有什么用的上的地方, 因为一般硬件不支持 render to overlay surface, 2D游戏一般也不用它, 因为象素格式问题, 从RGB的surface blt到YUV的 surface时需要硬件花时间去转换, 除非游戏里所有的其他surface也用YUV.
注: 一般硬件overlay surface只支持YUV和其他一些FOURCC的格式, RGB的一般不支持.

"倘若要将一种YUV格式的图象覆盖显示到一个自定义的窗口", 做到这个很容易的, 只需要创建一个和自定义窗口大小和位置都相同的overlay surface即可, 窗口的大小位置改变时, 此overlay也跟着改变. 一般视频播放软件就是这么做的.
但overlay是比较宝贵的资源, 如果仅仅是为了画一个如"动画按钮"之类的东西就用它也太浪费了点, 一般的硬件只能同时显示一个overlay surface, 多了也没必要.
(2)DirectDraw里面PrimarySurface的Blt方法和Flip方法有什么区别呢?
blt 可以用于大小不相同的表面,可以使用 color key 等等。blt 是将一个表面的内容复制到另一个表面,相当与 memcpy,当然显卡可能有硬件加速。

flip 只是交换了了指针,将当前显示表面的指针指向flip链中的下一个表面。对于更新主显示表面来说,flip应该比 blt要快


Blt适合全屏和窗口,
Flip只能用全屏。

bltfast是在不需要做图象翻转,放大,缩小时用的,据说,比blt快10%。
flip 就是换页。
blt和bltfast适合窗口和全屏。
flip 必须在全屏下使用。
如果,你做的是全屏游戏推荐用flip。
是基于窗口的游戏推荐bltfast。


其实这非常简单。创建两个表面,一个是主表面,一个是离屏表面(后台)。在表面上进行Blt。完了之后,用Flip翻转到前台。然后继续在后台表面画图。接着再翻转。如此一直进行下去就OK了。

不过Flip只在全屏下有效,而如果你采用Clipper来剪切屏幕的话,就无法进行BltFast操作。所以建议自己编程进行剪切.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值