为了能够试验各种 OpenGL 混合设置,我在我GLSurfaceView.Renderer
的onSurfaceCreated()
方法中包含了以下代码,整个项目设置为 API 级别 8:
GLES20.glEnable(GLES20.GL_BLEND);
GLES20.glBlendFuncSeparate(GLES20.GL_SRC_ALPHA, [etc...]);
GLES20.glBlendEquationSeparate(GLES20.GL_FUNC_ADD, [etc...]);
在我的 AVD 上,主机 GPU 支持一切顺利(除了我对缺少GL_MAX
的GLES20.glBlendFuncSeparate()
.
在我从以下集合中发现之前,需要进行一些尝试和错误:
glBlendFunc()
glBlendFuncSeparate()
glBlendEquation()
glBlendEquationSeparate()
两种设备仅支持glBlendFunc()
.
从我的立场来看,现在很难判断该依赖什么。我显然没有预料到这一点,也没有找到迄今为止在 Web 上通常实现的任何信息。
有人可以确认至少glBlendFunc()
在所有/大多数/...设备上都受支持,或者向我指出一些详细信息吗?
编辑:这是 logcat 的GLES20.glBlendEquation(GLES20.GL_FUNC_ADD)
:
D/libEGL ( 4393): loaded /system/lib/egl/libGLES_android.so
D/libEGL ( 4393): loaded /system/lib/egl/libEGL_POWERVR_SGX530_125.so
D/libEGL ( 4393): loaded /system/lib/egl/libGLESv1_CM_POWERVR_SGX530_125.so
D/libEGL ( 4393): loaded /system/lib/egl/libGLESv2_POWERVR_SGX530_125.so
W/dalvikvm( 4393): threadid=8: thread exiting with uncaught exception (group=0x4001d8a8)
E/AndroidRuntime( 4393): FATAL EXCEPTION: GLThread 9
E/AndroidRuntime( 4393): java.lang.UnsupportedOperationException: glBlendEquation
E/AndroidRuntime( 4393): at android.opengl.GLES20.glBlendEquation(Native Method)
E/AndroidRuntime( 4393): at org.blah.test.TestApplication$OGLBackground.onSurfaceCreated(TestApplication.java:209)
E/AndroidRuntime( 4393): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1317)
E/AndroidRuntime( 4393): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1116)
W/ActivityManager( 1297): Force finishing activity org.blah.test/.MainActivity