Vivante GPU(Android)上的OpenGL ES 2:深度缓冲区不';行不通

Vivante GPU(Android)上的OpenGL ES 2:深度缓冲区不';行不通,android,opengl-es-2.0,depth-buffer,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 =

我有一个三星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_深度_位)=16
  • glIsEnabled(GL_深度_测试)=真
  • glGet(GL_DEPTH_FUNC)=GL_LESS
  • glGet(GL_深度_写任务)=1
  • glGetString(GL_渲染器)=gc1000核心
Projection matrix还可以(该程序可以在任何其他Android设备上运行,也可以在iOS上运行)


什么可能导致问题?

很多人在三星设备的OpenGL ES驱动程序方面遇到了问题。他们是马车。检查是否可以获得任何驱动程序更新。

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

它返回什么配置?它真的有deph缓冲区吗?另外,您是否尝试过请求不带
EGL\u示例\u缓冲区的配置
EGL\u示例
?尝试过后,它没有效果:(我如何检查它是否有深度缓冲区?