为什么OpenGL ES 2.0中的像素颜色不准确?

时间:2015-08-09 11:55:06

标签: android opengl-es-2.0

我正在使用这些规格的EGLConfig:

lock

着色器:

EGL10.EGL_RED_SIZE, 5,
EGL10.EGL_GREEN_SIZE, 6,
EGL10.EGL_BLUE_SIZE, 5,
EGL10.EGL_DEPTH_SIZE, 16,
EGL10.EGL_RENDERABLE_TYPE, 4,
EGL10.EGL_SAMPLE_BUFFERS, 1,
EGL10.EGL_SAMPLES, 4,

onSurfaceCreated:

private final static String vertexShaderCode =
    "uniform mat4 uMVPMatrix;" +
    "attribute vec4 vPosition;" +
    "void main() {" +
    "  gl_Position = uMVPMatrix * vPosition;" +
    "}";

private final static String fragmentShaderCode =
    "precision mediump float;" +
    "uniform vec4 vColor;" +
    "void main() {" +
    "  gl_FragColor = vColor;" +
    "}";

onDrawFrame:

GLES20.glClearColor(1f, 1f, 1f, 1f);
// Initialising shapes

实际问题是形状颜色不牢固,这种情况发生在整个屏幕区域(有更亮的像素): enter image description here

真彩色是0.55f,0.8f,0.3f。

1 个答案:

答案 0 :(得分:0)

OpenGL默认在渲染输出上执行抖动。当输出缓冲区的颜色深度相对较低时,这一点尤为明显,就像RGB565配置代码请求的情况一样。

要禁用抖动,请在初始化OpenGL状态时添加此调用,例如在onSurfaceCreated()

GLES20.glDisable(GLES20.GL_DITHER);

抖动的目的当然是为了提高视觉质量。除非您要求输出颜色完全准确/均匀,否则启用抖动可能会为您提供更好的视觉效果。