作者pleaselouis (LOUISN)
看板GameDesign
标题Re: [请益] 请问关於 D3DPOOL_SYSTEMMEM 的相关设定
时间Wed Nov 26 17:54:05 2008
我刚刚终於实验出来了 看起来我的基础还真是不行 要多多加强 (汗颜)
※ 引述《pleaselouis (LOUISN)》之铭言:
: 今天有试过以 UpdateTexture 来作测试
: 不过我想我在基础的部分还不是很了解 所以再来这边请教大家
: 1.请问UpdateTexture是直接取代LockRect与UnlockRect之间所做的动作吗??
: 还是两者皆要存在??
两者皆要存在 因为 UpdateTexture 的第一个参数为 Resource 第二个为 Destination
所以做为Resource的第一个参数 便要使用LockRect与UnlockRect之间做的动作载入图片
再利用 UpdateTexture 把图片载入至 Destination
: 2.我的系统在Texture的宣告是使用 LPDIRECT3DTEXTURE9
: 而UpdateTexture的Texture参数是以 IDirect3DBaseTexture9 做宣告
: 就算我使用强制转型 Complier也一样不过 DirectX有其他可取代的Function吗?
这边真的是很汗颜了 代表我连C都有问题了 囧rz
MSDN对於 UpdateTexture 的记载如下:
HRESULT UpdateTexture(
IDirect3DBaseTexture9 * pSourceTexture,
IDirect3DBaseTexture9 * pDestinationTexture
);
而我两个准备要载入的变数宣告如下:
LPDIRECT3DTEXTURE9* pOutTexture;
LPDIRECT3DTEXTURE9 pTexture;
所以我当时是以如下方式使用:
UpdateTexture( &pTexture , pOutTexture );
发现不行 就改以强制转型宣告:
UpdateTexture( &(IDirect3DBaseTexture9 )pTexture
, (IDirect3DBaseTexture9 )pOutTexture );
结果当然还是不行...然後改为:
pDevice->UpdateTexture( pTexture , *pOutTexture );
就可以了...看起来我真的还未够班啊...不过我还是有点不太懂 可以说是硬测试出来的
可否有前辈 针对这一点解释一下 拜托 谢谢
: 3.我有在MSDN上看到 若POOL设定为 D3DPOOL_SYSTEMMEM
: 则DevCaps要设定为 D3DDEVCAPS_TEXTURESYSTEMMEMORY
: 但网路上有提 并非所有显卡都支援 D3DDEVCAPS_TEXTURESYSTEMMEMORY
: 而且我之前的文章有提到 我没有发现可以设定 DevCaps 的方式
: 请问真的没有设定DevCaps的方式吗??
因为问题解决了 所以我就没继续探讨了 <囧
: 4.我研究到现在 我想问题关键点应该是在 在POOL设定为 D3DPOOL_SYSTEMMEM 时
: 想要载入的图片并没有贴上去 所以才以系统预设的白色填满
: 因此问题的成因 是因为POOL设定为D3DPOOL_SYSTEMMEM
: 所以LockRect与UnlockRect之间的动作 才无法发挥功用
: 这是因为图片目前Loading在 主记忆体上 而非显示卡记忆体上
: 只要我能够把主记忆体上的资料 搬移到显示记忆体上 就能够正常运作??
: 请问我以上的推论是正确的吗??
: 麻烦大家非常不好意思 但是还是拜托大家给予我指导 谢谢大家
非常谢谢 moremusic 的指导 以後有问题 希望你也可以一起参予讨论 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.76.190.21
1F:推 darkflier:你多看点code就懂了 你是指标错误 11/26 19:35
2F:→ darkflier:LPDIRECT3DTEXTURE9 = IDIRECT3DTEXTURE9* 11/26 19:36
3F:→ darkflier:还有你为什麽要用cpu不用gpu速度差很多 11/26 19:36
4F:→ pleaselouis:因为这是上司的命令啊 <囧/ 11/27 09:25