2015-11-01 71 views
0

好吧,所以我的问题非常奇特。我正在将纹理映射到四边形上。纹理包含使用自由类型生成的字体值。当我将它渲染到屏幕上时,它具有伪像。 “Hola,elienay,y Khaleexy”是渲染的四/纹理。将屏幕坐标映射到纹理贴图时产生的文物

enter image description here

然而,当我进入着色器调试模式,并期待在质地,看看它为什么有神器,我没有得到文物。该四边形完美呈现,后缓冲区具有正确的最终颜色,没有1个单个伪影;见下文。 enter image description here

好吧,让你们看看我在说什么? Quad正在渲染并完美映射到纹理,但似乎问题在于应用程序将后台缓冲区显示在屏幕上时。任何想法,这可能是由什么和如何解决它?

下面是几个不同的随机字符的屏幕截图。仅在不以调试模式呈现场景时才显示工件是如何呈现的。 Artifacts 1 No artifacts when rendering the same scene in debug mode

+1

如果我不得不猜测,我会说你已经创建了一个与窗口一样大的交换链,而不是窗口的客户端大小。我的意思是,窗口本身包含一个小的边框和标题栏,不能渲染的区域,所以为了适应客户矩形,您的交换链将需要略微缩小。尝试测量渲染目标的大小以及可以渲染的窗口区域,并查看它们是否完全匹配。 –

+0

亚当,这是它的猜测,但是这是我第一件事检查。实际上,我正在使用AdjustWindowRectEx()来获取合适的客户区大小。再次,猜谜的地狱。 – Miguel

+0

好吧,亚当。你是对的。我检查了这一点,它应该已经正常工作,但是,对于函数的底部,其他人继续前进并编辑了函数调用,并且传递了错误的参数。发布你的答案,我会接受它。 – Miguel

回答

1

按照第一评论,交换链需要在客户端窗口矩形而不是整个窗口包括标题栏和边框的尺寸来创建。当窗口被创建时,几个像素过大的Windows将需要通过非常小的因子来重新调整交换链,这意味着您将失去1:1的像素精度。