2012-09-30 1 views
1

GLSurfaceView을 사용하는 탭 응용 프로그램이 있습니다. 탭을 처음 탭하면 뷰가 생성되어 표시됩니다. 내가 두 번 탭하면, 표면은 깎아 지른 것 같지만 새로운 것은 아닙니다. onStop()onResume() 메서드가 호출됩니다. 홈 버튼을 누르면 표면이 파괴됩니다. 앱을 다시 열면 새로운 서페이스가 만들어집니다.GLSurfaceView onResume - 탭 응용 프로그램 만들기 컨텍스트

지금 내 질문이 있습니다. 왜보기를 다시 표시 할 때 eglContext이 생성되지 않습니다. 왜 새 GLThread가 생성되지 않습니까? 또는 EGLSurfaceGLThread을 강제로 재 작성 할 수 있습니까? 내 삼성 갤럭시 미니에서 작동하지 않습니다. 내 삼성 갤럭시 SII에서 작동합니다. 문제를 봤어 GLSurfaceView에 버그를 발견했지만 작동하지 않습니다.

답변

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.