2012-02-02 5 views
1

텍스처를로드하는 데 시간이 걸리기 때문에로드하는 화면을 앱에 추가하려고합니다. 이 응용 프로그램을 적용하고 모든 것을 다시로드 할 else 문을 재개 후 나는Android : OpenGL 재로드 텍스처

public void onSurfaceCreated(GL10 gl, EGLConfig config) {   
     super.onSurfaceCreated(gl, config); 
     if(firstTimeCreate) { 
      load();   //load settings 
      Assets.LoadTextures(this); 
      firstTimeCreate = false;} 
      else { 
      //When screen is resumed.... 
      Assets.reloadTextures();} 

... 전이 방법을 무엇을하고 있었는지는 ... 나는이

else { 
      //When screen is resumed.... 
      Thread aThread = new Thread() 
      { 
       public void run(){ 
        boolean once = true; 
        while(once) 
        { 
         Assets.reloadTexutres(); 
         once = false; 
        } 
       } 
      }; 
      aThread.start(); 
     } 

에 적응하려고 노력 그러나 이제는 화면이 흰색이므로 OpenGL 캔트가 텍스처를 바인딩하지 못하는 것처럼 보입니다. 이 메소드에 스레드를 추가하여 잘못된 점이 무엇입니까? OpenGL을 렌더링하고 렌더링하기 전에 모든 텍스처가로드 될 때까지 기다려야합니까? 그렇다면 어떻게로드하고 나머지가 완료 될 때까지로드 스크린을 표시 할 수 있습니까?

감사합니다.

+0

텍스처를 비동기 적으로로드하는 방법을 찾았습니까? – droidmachine

답변

0

OpenGL ES 컨텍스트가 스레드에 할당되었습니다. 따라서 한 스레드에서 컨텍스트를 만들고 다른 스레드에서 사용할 경우에는 eglMakeCurrent(...) 함수를 호출해야합니다.

+0

아,이 텍스쳐가 스레드 내에서 만들어지기 때문에 OpenGL에 그 텍스쳐가 있다는 것을 의미합니까? 그것이 맞다면 해결 방법은 무엇입니까? 죄송합니다. EGL 표면이 없습니다. – Chris

+0

다른 스레드에서 렌더링 기능을 호출 할 수 없습니다. 따라서 하나의 스레드에서 EGL 컨텍스트를 작성하면이 스레드에서만 컨텍스트를 사용할 수 있습니다. 다른 스레드의 컨텍스트로 작업해야하는 경우 한 스레드에서 컨텍스트의 바인드를 해제하고 다른 스레드에서 바인드해야합니다. 그것은'EGL10.eglMakeCurrent' 함수로 할 수 있습니다. – qehgt