首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • D3D的Present速度为什么这么慢?有没有办法加快?
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • solomonlxd
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-22 15:51:28 楼主
    C/C++ code
    lpD3DDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&lpD3DPrimary); lpD3DDevice->BeginScene(); lpD3DDevice->StretchRect(lpD3DOffScr,NULL,lpD3DPrimary,NULL,D3DTEXF_NONE); lpD3DDevice->EndScene(); m_CalcTime.Start(); //开始计时 lpD3DDevice->Present(NULL, NULL, NULL, NULL); DWORD dwTime=m_CalcTime.End(); //结束计时


    lpD3DOffScr里面保存的是一张位图,m_CalcTime.Start()和m_CalcTime.End()用来精确计时,得到的是时钟振荡次数,结果当窗口在1024x768分辨率下最大化时测得Present耗时从1ms(4000000次振荡)到10ms不等,而上面的StretchRect将一张644x273的图拉伸到全屏仅仅用了10000次时钟振荡,为什么Present会这么慢?有没有办法可以加快他的速度?
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • solomonlxd
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:09:501楼 得分:0
    DDraw的Blt同样大小的拉伸显示只耗时400000次振荡,也就是D3D的1/10
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Silenker
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 19:30:572楼 得分:0
    那啥,DDraw的Blt在D3D中对应的操作不是你这样的。
    在D3D中进行2D绘制的话,是使用2D精灵或者类似的技术实现的,基本的原理就是在一个始终与屏幕平行的四边形上贴图,进行拉升或者旋转的时候只需要对那个四边形的4个顶点进行操作就可以了,通常是对每个顶点进行一次矩阵变换,既方便又高效。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • solomonlxd
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 13:12:053楼 得分:0
    引用 2 楼 Silenker 的回复:
    那啥,DDraw的Blt在D3D中对应的操作不是你这样的。
    在D3D中进行2D绘制的话,是使用2D精灵或者类似的技术实现的,基本的原理就是在一个始终与屏幕平行的四边形上贴图,进行拉升或者旋转的时候只需要对那个四边形的4个顶点进行操作就可以了,通常是对每个顶点进行一次矩阵变换,既方便又高效。


    这样啊,我先验证验证,如果确如你所说,一定给分
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • solomonlxd
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 14:04:124楼 得分:0
    用Sprite确实可以做相同的事,但是耗时基本上一样,因为同样需要Present来将缓冲中的画面绘制到屏幕,这个Present耗时实在太长,因为我要将其用在视频渲染上,所以才对这个效率有特殊要求
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved