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