如何调试EGL_BAD_CONFIG错误?

时间:2018-11-07 23:33:43

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

我有一些代码需要启用“抗锯齿”功能(完整项目src here)。目前预期的结果是一个红屏。

这是我的GLSurfaceView视图代码(Github上的src here):

class AAEnabledGLSurfaceView(context: Context, attrs: AttributeSet) : GLSurfaceView(context, attrs) {
    private val renderer = MRenderer()

    init {
        setEGLContextClientVersion(2)
        setEGLConfigChooser(MultiSampleConfigChooser())
        setRenderer(renderer)
        holder.setFormat(PixelFormat.TRANSLUCENT)
        setZOrderOnTop(true)
        renderMode = GLSurfaceView.RENDERMODE_WHEN_DIRTY
    }
}

我使用以下EGLCOnfigChooser实现(Github上的src here):

private class MultiSampleConfigChooser : GLSurfaceView.EGLConfigChooser {

    override fun chooseConfig(egl: EGL10, display: EGLDisplay): EGLConfig {

        val value = intArrayOf(0)
        val returnedConfigs = arrayOfNulls<EGLConfig>(16)

        var minimalSpecs = intArrayOf(
            EGL10.EGL_RED_SIZE,
            8,
            EGL10.EGL_GREEN_SIZE,
            8,
            EGL10.EGL_BLUE_SIZE,
            8,
            EGL10.EGL_ALPHA_SIZE,
            8,
            EGL10.EGL_SAMPLE_BUFFERS,
            1,
            EGL10.EGL_SAMPLES,
            2,
            EGL10.EGL_NONE
        )

        if (!egl.eglChooseConfig(display, minimalSpecs, returnedConfigs, returnedConfigs.size, value)) {
            throw IllegalArgumentException("No config found")
        }

        val configCount = value[0]
        Log.d(TAG, "$configCount configs found")

        return returnedConfigs[0]!!
    }
}

代码在 Nexus 5 上运行良好,但是在 Asus P027 上启动项目时,出现以下异常:

2018-11-07 15:17:35.600 26630-26646/com.whatnow.wtf E/AndroidRuntime: FATAL EXCEPTION: GLThread 5223
    Process: com.whatnow.wtf, PID: 26630
    java.lang.RuntimeException: createContext failed: EGL_BAD_CONFIG
        at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1205)
        at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1196)
        at android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:1046)
        at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1416)
        at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1253)

...这几乎没有用,因为它并没有真正告诉我配置的哪一部分不好。有谁知道代码有什么问题或者更好的方法,我该如何调试这些东西?我在日志中看不到其他任何东西。

0 个答案:

没有答案