2009-12-21 76 views
1

我有一个Direct3D应用程序,它在固定的资源(例如800x600)上运行窗口或全屏。为了支持宽屏幕模式,我渲染到800x600的后台缓冲区,然后使用Blt将最后一帧绘制到通常较大(如1280x720)的前部缓冲区的一部分中,以便将800x600图像拉伸到960x720以保持长宽比。DirectX中的弹出窗口导致锯齿状边缘

能正常工作,除了在某些视频卡/ OS /驱动器组合(的NVIDIA Quadro,DX11,视窗7),其中的blit似乎使用点采样,产生锯齿边缘和大体不平滑的最终图像来完成。

有什么办法可以避免这种情况?例如,强制Blt在放大时使用线性滤波器?

(注:我知道我可以使原来的800x600的资产960x720,而不是在最后的拉伸,而是有其他缺点,所以在最后的拉伸是首选的解决方案)

+0

我很想知道这些缺点是什么,因为我相信你会做得更好,而不是像上面那样进行破解。至少你所有的3D渲染看起来都是正确的...... – Goz

回答

1

我不认为有任何方法可以控制这一点。我读了一些说,这种行为改变了Windows7的一些司机,但我现在找不到参考。

您也许可以渲染到800x600的纹理,然后在实际屏幕尺寸下使用此纹理绘制全屏幕四边形。那么至少你可以控制过滤。

0

您是否考虑将场景渲染为纹理,然后将该纹理渲染为后缓冲区?这会给你带来麻烦。

它适用于一些机器的原因是,这究竟是怎么blit的驱动程序将

实施要得到最好的结果,但是,你真的是betetr关闭只是渲染到适当大小的后备缓冲。即如果你想1280x720 ...渲染到一个1280x720的后台缓冲区,并有适当的视野和宽高比的修改。

+0

是的,我前几天做了纹理渲染,效果很好。我渲染到一个800x600的目标,然后拉伸最后一个四边形,直接渲染到最终大小的缓冲区有其他问题,正如我在我的原始帖子中所评论的。 – ggambett

相关问题