2

我有以下简单的片段着色器:

precision highp float;
main()
{
gl_FragColor = vec4(0.15, 0.15, 0.15, 0.15);
}

我正在使用帧缓冲区对象渲染到纹理。从帧缓冲区读回值时,我得到以下信息:

38, 38, 38, 38, 39, 39, 39, 39,38, 38, 38, 38, 39 等

0.15*255 = 38.25 所以我希望所有像素都能得到 38,我确实在我的桌面 GPU(英特尔 4000)和 Tegra 3 上得到了。如果有人能对这个问题有所了解,我会很高兴。由于三星 Galaxi s2、s3 和 s3 mini 中使用了 Mali-400MP,因此对于为移动设备开发 GPGPU 的任何人来说,这都是至关重要的。

4

1 回答 1

3

看起来您的输出正在抖动,因为一个像素留下的错误被转移到下一个像素被四舍五入的地方。记住 GL_DITHER 在 OpenGL 中默认开启,尝试执行 glDisable(GL_DITHER)。

于 2014-07-14T18:00:37.917 回答