我有一个使用GLSurfaceView
的标签式应用程序。如果我第一次选中,则会创建并显示视图。如果我将它选中两次,表面就会被破坏,但不是新创造的。调用方法onStop()
和onResume()
。如果我按下主页按钮,表面就会被破坏。当我再次打开应用程序时,会创建一个新的表面。
我现在的问题是:当我想第二次显示视图时,为什么没有创建eglContext
?为什么没有创建新的GLThread
?或者我如何强制重新创建EGLSurface
和GLThread
?在我的三星Galaxy mini上它不起作用。在我的三星Galaxy SII上它可以工作。我搜索了问题并在GLSurfaceView
中发现了一个错误,但没有正常工作。
感谢您提供一些有用的答案,请原谅我的英语: - )
答案 0 :(得分:1)
你有IllegalArgumentException
吗?
10-08 18:05:36.490: E/GLSurfaceView(3440): eglCreateWindowSurface
10-08 18:05:36.490: E/GLSurfaceView(3440): java.lang.IllegalArgumentException: Make sure the SurfaceView or associated SurfaceHolder has a valid Surface
10-08 18:05:36.490: E/GLSurfaceView(3440): at com.google.android.gles_jni.EGLImpl._eglCreateWindowSurface(Native Method)
10-08 18:05:36.490: E/GLSurfaceView(3440): at com.google.android.gles_jni.EGLImpl.eglCreateWindowSurface(EGLImpl.java:90)
10-08 18:05:36.490: E/GLSurfaceView(3440): at android.opengl.GLSurfaceView$DefaultWindowSurfaceFactory.createWindowSurface(GLSurfaceView.java:798)
10-08 18:05:36.490: E/GLSurfaceView(3440): at android.opengl.GLSurfaceView$EglHelper.createSurface(GLSurfaceView.java:1065)
10-08 18:05:36.490: E/GLSurfaceView(3440): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1433)
10-08 18:05:36.490: E/GLSurfaceView(3440): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1216)
如果是,您应该修补GLSurfaceView
。
从:
if (createEglSurface) {
if (LOG_SURFACE) {
Log.w("GLThread", "egl createSurface");
}
gl = (GL10) mEglHelper.createSurface(getHolder());
if (gl == null) {
// Couldn't create a surface. Quit quietly.
break;
}
sGLThreadManager.checkGLDriver(gl);
createEglSurface = false;
}
为:
if (createEglSurface) {
if (LOG_SURFACE) {
Log.w("GLThread", "egl createSurface");
}
gl = (GL10) mEglHelper.createSurface(getHolder());
if (gl == null) {
// If we escape, GLThread ends up. Don't escape.
continue;
}
sGLThreadManager.checkGLDriver(gl);
createEglSurface = false;
}
我创建了我的GLSurfaceView class,然后像上面那样修补它。
它已在JellyBean中修复。另见commit。