1

我有一个使用GLSurfaceView. 如果我第一次使用选项卡,则会创建并显示视图。如果我点击它两次,表面正在被破坏,但不是新创建的。方法onStop()onResume()被调用。如果我按下主页按钮,表面就会被破坏。当我再次打开应用程序时,正在创建一个新的表面。

eglContext我现在的问题是:当我想第二次显示视图时,为什么没有创建蜜蜂?为什么没有新的GLThread创造?或者我怎样才能强制重新创建EGLSurfaceand GLThread?在我的三星 Galaxy mini 上它不起作用。在我的三星 Galaxy SII 上它可以工作。我用谷歌搜索了这个问题,发现了一个错误GLSurfaceView,但没有有效的修复。

感谢您提供一些有用的答案,请原谅我的英语:-)

4

1 回答 1

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 类并像上面一样修补它。

它已在 JellyBean 中修复。另请参阅此提交

于 2012-10-15T10:36:43.160 回答