我有一些代码需要启用“抗锯齿”功能(完整项目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)
...这几乎没有用,因为它并没有真正告诉我配置的哪一部分不好。有谁知道代码有什么问题或者更好的方法,我该如何调试这些东西?我在日志中看不到其他任何东西。