我使用了一个相当简单的OpenGL渲染管道 - 只需使用GL_TRIANGLES获取一些纹理并将它们渲染到RGB8渲染缓冲区。渲染缓冲区的某些部分未被覆盖,并保留为glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
。没有alpha,没有深度等等。代码本身在这里很长,但它只是gl-image-masher的一个小变化。
奇怪的是,我希望渲染缓冲区未被渲染缓冲区覆盖的部分保持纯黑色。但事实上,在三角形边缘附近有一些像素不是黑色,但有一些像素值(0,1,0)或其排列(最多255个)。它在视觉上难以察觉,但黑色在我的渲染缓冲区中具有特殊含义。它看起来像这样:
(真正的黑色由白色代替)。当主要背景为白色或紫色(255,0,255)时会发生同样的情况 - 一些像素将是(255,1,255)或(255,0,254)等。
我尝试修改片段着色器以输出固定的颜色,效果非常有趣,杂散像素仅在坐标附近聚类:
即使使用GL_LINES而不是GL_TRIANGLES,也会出现伪影,边缘会有不同的倾斜,并且会禁用抖动和消除锯齿功能。
我想知道这是我做的事情,我应该关闭一些OpenGL优化,甚至是驱动程序错误? (这是在Linux上的fglrx驱动程序14.4.2,该卡是Radeon HD 7800系列。)
答案 0 :(得分:1)
对不起,我忘了回答这个,但我应该。
所以,这被证明是一个非常愚蠢的错误 - 在一个有点复杂的管道中,输出变成了一个JPEG文件(即使这不是我最终打开它的格式GIMP,有希望让我感到震惊)。然后,边缘处的这个混乱是一个明显的JPEG压缩伪像。
JPEG文件压缩级别设置为" 100"。但这仍然会产生有损压缩,尽管像素值只有+ -1。