我正在编写一个Android应用程序,我正在尝试尽可能地最大化设备支持。这意味着(对我来说至少)支持OpenGL ES 1.0和OpenGL ES 2.0,具体取决于哪些可用。
OpenGL ES 2.0中的着色器编译器支持是可选的,但我的应用程序需要(当然,除非我使用OpenGL ES 1.0),到目前为止I haven't been able to find any information about availability。因此,我需要检查编译器支持是否可用,如果没有,则返回OpenGL ES 1.0。
问题在于,如果在调用GLES20.glGetIntegerv(GLES20.GL_SHADER_COMPILER, ...)
方法之前调用onSurfaceCreated(...)
来检查支持,则会返回GL_FALSE
(如果我在onSurfaceCreated中调用它,则返回{{1} }})。
这意味着我需要创建我的GL20 Renderer并提交我的GLSurfaceView以通过setEGLContextClientVersion(2)
和setRenderer(myGL20Renderer)
使用GL20,然后才能确定这是否真的是我想要的要做。
除了再次抛弃所有设置并且基本上重新开始或接受我的应用程序可能会在表示它们支持GL 2.0但不提供着色器编译的系统上崩溃这一事实之外,还有其他方法吗?