Vivante GPU(Android)上的OpenGL ES 2:深度缓冲不起作用

时间:2014-10-14 11:38:57

标签: android opengl-es-2.0 depth-buffer

我有三星Galaxy Tab 3(Android 4.2.2),深度缓冲似乎不起作用。任何其他设备都可以。我按如下方式创建上下文:

setEGLContextClientVersion(2);
setEGLConfigChooser(new MultisampleConfigChooser(...));

// ...

@Override
public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {
    mValue = new int[1];

    // Try to find a normal multisample configuration first.
    int[] configSpec = {
            EGL10.EGL_RED_SIZE, 5,
            EGL10.EGL_GREEN_SIZE, 6,
            EGL10.EGL_BLUE_SIZE, 5,
            EGL10.EGL_DEPTH_SIZE, 16,
            // Requires that setEGLContextClientVersion(2) is called on the view.
            EGL10.EGL_RENDERABLE_TYPE, 4 /* EGL_OPENGL_ES2_BIT */,
            EGL10.EGL_SAMPLE_BUFFERS, (!mDisableMultisampling ? 1 : 0)/* true */,
            EGL10.EGL_SAMPLES, (!mDisableMultisampling ? 2 : 0),
            EGL10.EGL_STENCIL_SIZE, 8,
            EGL10.EGL_NONE
    };

    if (!egl.eglChooseConfig(display, configSpec, null, 0, mValue)) {
        // ...
    }

    ...
}

我尝试了以下事项:

  • 禁用多重采样(无效)
  • 使用24位深度(无效)
  • glGet(GL_DEPTH_BITS)= 16
  • glIsEnabled(GL_DEPTH_TEST)= true
  • glGet(GL_DEPTH_FUNC)= GL_LESS
  • glGet(GL_DEPTH_WRITEMASK)= 1
  • glGetString(GL_RENDERER)= gc1000 core

投影矩阵正常(该程序适用于任何其他Android设备以及iOS)。

可能导致问题的原因是什么?

2 个答案:

答案 0 :(得分:1)

“用户错误。”显然 glDepthMask 接受除Vivante之外的每个GPU上大于1的值。找出这个并将其强制为0或1解决了这个问题。

答案 1 :(得分:0)

许多人在使用三星设备的OpenGL ES驱动程序时遇到问题。他们是马车。检查您是否可以获得任何驱动程序更新。