Direct3D9:启用mipmap后,我的纹理坐标似乎是错误的

时间:2014-11-12 09:59:10

标签: c++ windows directx direct3d mipmaps

我有一个纹理,其中包含我用来在最终渲染目标上放置字符串和图标的符号和字符。例如,为了生成一个字符串,我将每个字符渲染为具有适当纹理坐标的单个四边形。

当我尝试将mipmap用于包含所有符号的纹理时,我的问题就出现了。没有mipmap,一切都按预期工作。仅更改CreateTexture()调用以生成所有mip级别并将D3DUSAGE_AUTOGENMIPMAP添加到使用参数后,我只会出现乱码输出:

enter image description here

纹理是这样创建的:

CreateTexture(width, height, 0, D3DUSAGE_DYNAMIC | D3DUSAGE_AUTOGENMIPMAP, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &m_texture, nullptr);

渲染时使用以下纹理过滤:

SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);

渲染的所有东西仍然是纹理的一部分,但纹理坐标似乎都是错误的。我尝试用PIX调试这个问题,但我的渲染目标看起来完全符合预期。 (我相信,PIX使用软件渲染,而我的GPU是带有最新驱动程序的Nvidia Quadro。)

我真的不知道应该继续往哪里看。我的纹理坐标应该是正确的,因为一切都没有mipmap。在为这个纹理打开mipmapping时,我是否遗漏了什么?可能导致这种情况的任何想法?

编辑:我尝试使用参考驱动程序(D3DDEVTYPE_REF而不是D3DDEVTYPE_HAL)并遇到同样的问题,这表明它不是驱动程序问题,而是在应用程序代码中。不过,如果我不使用mipmap,我不知道在哪里可以看到它。

0 个答案:

没有答案