如何关闭Direct3D输出过滤

时间:2012-04-01 10:10:01

标签: antialiasing slimdx smoothing direct3d9

我正在使用DirectX9将视频输出渲染到屏幕上。 使用的库是SlimDX。

创建的软件用于标记输出设备中的坏像素,因此无需进行纹理过滤/平滑处理。

我禁用了所有纹理过滤选项,禁用了抗锯齿功能,并在后备缓冲区和渲染纹理之间以1:1的比例将纹理与屏幕对齐。 事实上,在某些设备上,DirectX似乎在输出上做了一些双线性过滤/模糊。

我需要所有输出都是块状的,使用-0-过滤。 由于所有调整大小代码都是在控件本身上运行的(没有后备缓冲区调整大小等),我没有选择调整后备缓冲区的大小。

奇怪的是,这只发生在某些设备上,而不是全部。

如何告诉Di​​rectX不要平滑它呈现给控件的内容? (禁用对后/前缓冲区进行的任何纹理过滤)

提前感谢您的帮助(:

对于那些不明白我想要摆脱的人 - 当渲染图像的分辨率低于绘制区域的分辨率时,Direct3D在像素之间创建平滑过渡。 我想要的是将每个像素绘制成一个简单的矩形,绝对没有过滤,在哪里可以找到控制这种行为的设置?

1 个答案:

答案 0 :(得分:3)

我在网上查看了它,似乎没有任何适当的解释这种行为。

发生了什么:
WindowsXP和更早版本的默认DirectX行为是平滑所有渲染输出(如果您渲染的控件/屏幕与后备缓冲区的大小不同)

从WindowsVista开始,默认行为是按原样保留像素(这基本上是指代表每个像素的拉伸矩形)

由于这是驱动程序本身的行为,因此用户完全无法控制: 唯一的解决方案是每次调整控件大小时重置后备缓冲区以保存每像素渲染,没有办法解决它 - 否则DirectX可以控制调整大小的技术