无法创建的OpenGL ES 3.0上下文
问题描述:
我试图对Android模拟器的Nexus 6 API 24.使用GLSL支持OpenGL ES 3.0与OpenGL ES的上下文2.0我宣布我的顶点着色器和片段着色器与无法创建的OpenGL ES 3.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)
我在做什么错?请帮助,先进的感谢。
答
Android模拟器不支持OpenGL ES 3.0。
参见:
https://developer.android.com/ndk/guides/stable_apis.html
具体做法是:
注:Android模拟器不支持OpenGL ES 3.0的硬件 仿真。运行和测试使用此API的代码需要真实的 设备,其硬件可支持OpenGL ES 3.0
感谢您的回复。顺便说一句,我也发现在给定的链接: 注意:Android模拟器不支持OpenGL ES 2.0硬件仿真。运行和测试使用此API的代码需要具有可支持OpenGL ES 2.0的硬件的真实设备。 但是,我使用的示例可以创建OpenGL ES 2.0上下文,并在manifest.xml中声明OpenGL ES 2.0,没有任何问题。这是给定链接中的某种错误,还是它不适用于OpenGL ES 2.0的GLSL? –