2015-08-09 58 views
0

我使用一個EGLConfig規格如下:爲什麼在OpenGL ES 2.0中像素顏色不準確?

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, 

着色器:

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;" + 
    "}"; 

onSurfaceCreated:

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

onDrawFrame:

GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT); 
// Drawing shapes 

法案ual問題在於形狀顏色並不牢固,這發生在整個屏幕區域(有更亮的像素): enter image description here

實際顏色是0.55f,0.8f,0.3f。

+1

這部分非常類似於http://stackoverflow.com/questions/31204343/opengl-es-2-0-solid-colour-colour-value-precision-issue。但另一個問題更多地集中在顏色的實際價值上,顏色不統一隻是其中的一個方面。所以它看起來不夠接近,因此被標記爲重複。 –

+0

我看到了這個問題,但不知何故,當我測試時我錯過了它真正起作用。 – YeeApple

回答

1

OpenGL在默認情況下對渲染輸出執行抖動。當輸出緩衝區的顏色深度較低時,這一點尤爲明顯,就像RGB565配置您的代碼請求一樣。

要禁用抖動,請在初始化OpenGL狀態時添加此調用,例如,在onSurfaceCreated()

GLES20.glDisable(GLES20.GL_DITHER); 

抖動的目的當然是提高視覺質量。除非您要求輸出顏色完全準確/統一,否則啓用抖動可能會爲您提供更好的視覺效果。