我将后备缓冲区锁定在direct3D 9中并将图像复制到它。我在一台计算机上注意到,当图像被拉伸到屏幕时,它变得模糊。在我测试的另一台计算机上,它完全未经过滤(像素化)。有没有办法指定后备缓冲区如何被采样到屏幕上,还是由其他东西控制?
我已经尝试了
Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);
然而它没有效果;我认为它只影响纹理。
答案 0 :(得分:1)
SetSamplerState不会影响backbuffer绘制到屏幕的方式。 AFAIK大多数驾驶员将使用点采样,这意味着像素将丢失或加倍,导致质量差。 BTW,机器上看起来很好的GPU /驱动程序是什么(你不能/不应该在任何地方依赖这种行为)?
执行此操作的正确方法是将图像复制到纹理并渲染screen aligned quad,以便您可以使用硬件采样为您平滑结果。
如果由于某种原因您无法使用纹理+渲染过程,则可以使用IDirect3DDevice9::StretchRect在复制到后备缓冲区时过滤图像。要从系统内存中实际加载图像,您必须使用另一个表面,锁定和复制它或使用D3DXLoadSurfaceFromMemory。