无法创建OpenGL ES 3.0上下文

时间:2017-02-14 10:33:24

标签: opengl-es glsl opengl-es-3.0

我正在尝试在Android模拟器Nexus 6 API 24上使用GLSL for OpenGL ES 3.0和OpenGL ES Context 2.0。我在我的顶点着色器和片段着色器中声明了

"#version 300 es"

但是我得到了错误:不支持的着色器版本。搜索后,我认为可能更改为OpenGL ES Context 3.0可以解决我的问题。因此,我编辑了我的GLES3JNIView.java(来自此示例:https://github.com/googlesamples/android-ndk/tree/master/gles3jni/app/src/main/java/com/android/gles3jni)。

使用

将上下文从2更改为3
setEGLContextClientVersion(3);

并编辑清单:

< uses-feature android:glEsVersion="0x00030000" android:required="true" />

但是我遇到了另一个问题,当我运行应用程序时,它会在启动时崩溃。 我在logcat中找到了这些:

02-14 17:29:04.879 5546-5546/? I/art: Not late-enabling -Xcheck:jni (already on)
02-14 17:29:04.879 5546-5546/? W/art: Unexpected CPU variant for X86 using defaults: x86
02-14 17:29:05.215 5546-5568/com.android.gl2jni I/OpenGLRenderer: Initialized EGL, version 1.4
02-14 17:29:05.215 5546-5568/com.android.gl2jni D/OpenGLRenderer: Swap behavior 1
02-14 17:29:05.313 5546-5568/com.android.gl2jni E/EGL_emulation: tid 5568: eglSurfaceAttrib(1146): error 0x3009 (EGL_BAD_MATCH)
02-14 17:29:05.313 5546-5568/com.android.gl2jni W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa917dca0, error=EGL_BAD_MATCH

[ 02-14 17:29:05.430  5546: 5565 D/         ]
                                                                  HostConnection::get() New Host Connection established 0xacd1d780, tid 5565
02-14 17:29:05.435 5546-5565/com.android.gl2jni E/AndroidRuntime: FATAL EXCEPTION: GLThread 157
                                                                  Process: com.android.gl2jni, PID: 5546
                                                                  java.lang.IllegalArgumentException: eglChooseConfig failed
                                                                      at android.opengl.GLSurfaceView$BaseConfigChooser.chooseConfig(GLSurfaceView.java:865)
                                                                      at android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:1036)
                                                                      at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1416)
                                                                      at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1253)

我做错了什么?请高手帮忙,谢谢。

1 个答案:

答案 0 :(得分:1)

Android模拟器不支持OpenGL ES 3.0。

请参阅:

https://developer.android.com/ndk/guides/stable_apis.html

具体做法是:

  

注意:Android模拟器不支持OpenGL ES 3.0硬件   仿真。运行和测试使用此API的代码需要真实的   具有可支持OpenGL ES 3.0的硬件的设备