随笔-15  评论-18  文章-9  trackbacks-0

         这几天在弄后处理,看了下网上和skd在的介绍后,大概框架原理是明白了,但是在实现的过程中还是遇到了一些问题这些问题。这些问题会在之后慢慢记录下来。
        问题1:交换两个 IDirect3DTexture9*变量,原本在处理多个效果时,我的想法是方法交替地用两个textuere,所以有下面一段代码

1    IDirect3DTexture9* pTex;
2    pTex                  = m_pSoureTex;
3    m_pSoureTex  = m_pTargetTex
4    m_pTargetTex = pTex;

      但是上面代码并没有真正交换到,都变成了m_pSoureTex的内容,我觉得很奇怪,我觉得这样可以交换m_pTargetTex 和 m_pSoureTex指向的对象呀。设置断点调试的结果是:

很明显虽然m_pTargetTex 和 m_pSoureTex 的地址变了,但是其真正的内容是没相同的。这个问题我并不太清楚,网上也没找到答案,我想着与com有关吧,一般人都不会写出这样的代码吧,来交换两个texue的吧,这应该也算是对dx的不够了解和写代码不好的一个原因吧。但是以后要有时间真的要找找是什么原因才行。对应这个问题参考了sdk例子中的写法。其中例子中用了CRenderTargetChain,其技巧就是把两个变量存在一个数组中,通过改变下标返回想要的IDirect3DTexture9*这个方法不错,也值得借鉴。
        问题2:发现在公司的机器上程序能正确运行,但是我自己的笔记本上就出问题了,texture的大小不对。我创建贴图用的代码是这样的

    D3DXCreateTexture(
        gDevice,
        surfaceDesc.Width,
        surfaceDesc.Height,
        surfaceDesc.Usage,
        D3DUSAGE_RENDERTARGET,
        surfaceDesc.Format,
        D3DPOOL_DEFAULT,
        
&g_pSoureTex
        );

我通过获取到g_pSoureTex的D3DSURFACE_DESC发现 它的长和宽居然不是我指定的长和宽 都变成了2的幂的大小了,网上查了下 原来是 D3DXCreateTexture;
函数经过了优化处理,把贴图的大小改变了。所以我用IDirect3DDevice9::CreateTexture函数就没问题了。但是在公司也是用D3DXCreateTexture函数但没有把长宽优化到2的幂,难道这和显卡有关了!?

posted on 2011-03-23 22:35 木华 阅读(458) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理