-.-directdraw 相关的一些问题

jinjiajie 2013-03-21 02:44:52
最近接手了一个图形库的维护。。发现那些坑爹的前人 一边用了directdraw对surface直接进行StretchDIBits 操作将读出来的图拷贝到一个surface上,然后用 drawPrimative将这些surface上query出来的 texuture画到另外一个surface上,最后再把这个surface flip到界面上。

于是出现了以下的问题,由于在创建读图用surface的设置用了
m_ddsd.ddsCaps.dwCaps = DDSCAPS_TEXTURE ;
m_ddsd.ddsCaps.dwCaps2 = DDSCAPS2_TEXTUREMANAGE;

因此一旦显卡被强占 restore,再对这些贴图用surface用StretchDIBits 重绘之后,这些创建出来的surface 不知道怎么搞的 query出来的 texture全部变成了黑色,用drawprimative到新的surface上的时候一片漆黑 ,但是换成blt过去呢。。又是正常色。。
而我将dwcaps2设为0的话,则drawprimative又正常了 -。-
看了下文档,说是DDSCAPS2_TEXTUREMANAGE不能用做 retain mode ,但是类,奇怪的是 ,如果不restore,一切又都正常,这是怎么一回事类。

另,图形库在针对某些显存特别小的机器的时候,会将部分超过一定size的 surface生成失败,但是获取的显卡信息却是最大支持大小 竟然是超过这个size的。。何解 ?我已经被折磨了近2个礼拜了。。完全颠覆了我的认知。。求高手指点迷津
...全文
101 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinjiajie 2013-03-21
  • 打赏
  • 举报
回复
-.-新问题,在大多数现在的机器下,超过1024的图片都显示正常,但是在少数32M的机器上测试,竟然会导致超过1024的图显示成黑块,但是取device 信息,那台机器的surface最大值支持到2048,这个一般是什么原因呢?
ready_gogogo 2013-03-21
  • 打赏
  • 举报
回复
学习一下
jinjiajie 2013-03-21
  • 打赏
  • 举报
回复
额。。自己搞定了。。
jinjiajie 2013-03-21
  • 打赏
  • 举报
回复
再而且。。我认为 m_ddsd.ddsCaps.dwCaps2 = DDSCAPS2_TEXTUREMANAGE; 才是正确的啊。。为啥重建后的surface取不了类。。
jinjiajie 2013-03-21
  • 打赏
  • 举报
回复
而且。。。我应该一直运行在immediatte mode下啊。。

24,860

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧