2012-02-02 116 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 2012-07-14 22:01:51

回答

0

OpenGL ES的上下文被分配給線程。因此,如果要在一個線程中創建上下文並在另一個線程中使用它,則應該調用eglMakeCurrent(...)函數。

+0

啊,你的意思是說,因爲這些紋理是在線程中創建的,OpenGL並不知道它?如果這是正確的,那麼工作是什麼?對不起,我沒有EGL曲面 – Chris 2012-02-02 18:25:24

+0

你不能從不同的線程調用渲染函數。所以,如果你在一個線程中創建了EGL上下文,這意味着上下文只能在這個線程中使用。如果您需要使用另一個線程的上下文,則必須從一個線程解除綁定並綁定到另一個線程。它可以通過'EGL10.eglMakeCurrent'函數完成。 – qehgt 2012-02-02 18:47:03