我使用的是一个相当简单的OpenGL呈现管道--只需获取一些纹理并使用GL_TRIANGLES将它们呈现到RGB8呈现缓冲区中。呈现缓冲区的某些部分未被覆盖,并保持为glClearColor(0.0f, 0.0f, 0.0f, 1.0f);。没有alpha,没有深度等等。代码本身在这里复制起来有点长,但是它是gl-图像处理机的一个细微的变化。
奇怪的是,我希望渲染缓冲区中未被渲染缓冲区覆盖的部分保持纯黑。但事实上,在三角形边缘附近有一些像素不是黑色的,而是值(0,1,0)或该值的排列(最大为255 )。它在视觉上是看不见的,但是黑色在我的渲染缓冲区中有一个特殊的含义。看起来是这样的:

(用白色代替真正的黑色)。同样的情况发生在主背景是白色或紫色(255,255)-一些像素将是(255,1,255)或(255,254)等等。
我试图修改片段着色器以输出固定的颜色,效果非常有趣,杂散像素仅在坐标跳过附近聚集:

这些伪影甚至出现在GL_LINES而不是GL_TRIANGLES上,有各种倾斜的边缘,抖动和反混叠被禁用。
我想知道这是否是我所做的事情,一些我应该关闭的OpenGL优化,甚至是一个驱动程序错误?(这是在Linux上的fglrx驱动程序14.4.2,这张卡是Radeon 7800家庭的。)
发布于 2014-12-09 20:42:47
对不起,我忘了回答这个问题,但我应该回答。
因此,这是一个非常愚蠢的错误--在有点复杂的管道中,的输出变成了文件(尽管这不是我最终在GIMP中打开的格式,希望这会给我留下深刻的印象)。而这混乱的边缘是一个明显的JPEG压缩伪影。
JPEG文件压缩级别设置为"100“。但这仍然是有损压缩,虽然只有+-1的像素值.
https://stackoverflow.com/questions/25552200
复制相似问题