这几天在弄后处理,看了下网上和skd在的介绍后,大概框架原理是明白了,但是在实现的过程中还是遇到了一些问题这些问题。这些问题会在之后慢慢记录下来。 问题1:交换两个 IDirect3DTexture9*变量,原本在处理多个效果时,我的想法是方法交替地用两个textuere,所以有下面一段代码
但是上面代码并没有真正交换到,都变成了m_pSoureTex的内容,我觉得很奇怪,我觉得这样可以交换m_pTargetTex 和 m_pSoureTex指向的对象呀。设置断点调试的结果是:很明显虽然m_pTargetTex 和 m_pSoureTex 的地址变了,但是其真正的内容是没相同的。这个问题我并不太清楚,网上也没找到答案,我想着与com有关吧,一般人都不会写出这样的代码吧,来交换两个texue的吧,这应该也算是对dx的不够了解和写代码不好的一个原因吧。但是以后要有时间真的要找找是什么原因才行。对应这个问题参考了sdk例子中的写法。其中例子中用了CRenderTargetChain,其技巧就是把两个变量存在一个数组中,通过改变下标返回想要的IDirect3DTexture9*这个方法不错,也值得借鉴。 问题2:发现在公司的机器上程序能正确运行,但是我自己的笔记本上就出问题了,texture的大小不对。我创建贴图用的代码是这样的
我通过获取到g_pSoureTex的D3DSURFACE_DESC发现 它的长和宽居然不是我指定的长和宽 都变成了2的幂的大小了,网上查了下 原来是 D3DXCreateTexture;函数经过了优化处理,把贴图的大小改变了。所以我用IDirect3DDevice9::CreateTexture函数就没问题了。但是在公司也是用D3DXCreateTexture函数但没有把长宽优化到2的幂,难道这和显卡有关了!?