游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2357|回复: 3

[DDraw]对于清空后台表面,是直接Lock快,还是用FillRect()快一

[复制链接]

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
发表于 2012-2-21 14:42:00 | 显示全部楼层 |阅读模式
在用ddraw绘制每一帧的时候,总是需要清空一下画布,类似D3D的Clear()函数,我现在有两种方式进行清空,
一种是直接Lock后台表面,然后赋值自己设定的清除色,
另一种则是以GetDC的方式,使用FillRect()来清除画布,


请问哪一种效率更高些???
各位一般用的是哪一种呢?

33

主题

159

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
QQ
发表于 2012-2-21 16:18:00 | 显示全部楼层

Re:[DDraw]对于清空后台表面,是直接Lock快,还是用FillRect()

GetDC 好像是借用GDI的方法清除的吧

6

主题

74

帖子

230

积分

中级会员

Rank: 3Rank: 3

积分
230
发表于 2012-2-22 13:36:00 | 显示全部楼层

Re:[DDraw]对于清空后台表面,是直接Lock快,还是用FillRect()

为啥要清?难道你每帧都没有填充满么?

第1种的话相当于直接写显存,没有用到加速,会比较慢。
第2种可能会更慢。

最快的办法是建个offscreen surface,用你要的颜色填充。然后以后需要清除的时候blt就行了



50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-2-23 09:25:00 | 显示全部楼层

Re: Re:[DDraw]对于清空后台表面,是直接Lock快,还是用FillRect

Kevin_Qing: Re:[DDraw]对于清空后台表面,是直接Lock快,还是用FillRect()快一些??

为啥要清?难道你每帧都没有填充满么?

第1种的话相当于直接写显存,没有用到加速,会比较慢。
第2种可...


我的第一种的确是离屏表面(后台表面),即:DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY,他不是直接写显存
而且这个后台表面也不用当时就进行blt,而是在每一帧结束渲染的时候执行一次就行,因为它是作为所有图像blt的对象(画布),类似于GDI里的memory dc


另外,擦除工作是必须要做的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-9 14:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表