-.-directdraw 相关的一些问题
最近接手了一个图形库的维护。。发现那些坑爹的前人 一边用了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个礼拜了。。完全颠覆了我的认知。。求高手指点迷津