2012-02-02 118 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