我有一个纹理,其中包含我用来在最终渲染目标上放置字符串和图标的符号和字符。例如,为了生成一个字符串,我将每个字符渲染为具有适当纹理坐标的单个四边形。
当我尝试将mipmap用于包含所有符号的纹理时,我的问题就出现了。没有mipmap,一切都按预期工作。仅更改CreateTexture()
调用以生成所有mip级别并将D3DUSAGE_AUTOGENMIPMAP
添加到使用参数后,我只会出现乱码输出:
纹理是这样创建的:
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,我不知道在哪里可以看到它。