OpenGLESアプリケーションの非メインスレッドにいくつかのテクスチャをプリロードする必要があります。私はこれを読んだ:Can't call glGenTextures on multithreaded android appしかし、私が必要とするより多くのJavaバージョン。メインループにテクスチャをアップロード/作成するには、ロードするスレッドにどのように伝える必要がありますか?私はコンテキストを作成し、何らかの形で主なコンテキストと共有することについて何かを読んでいます。どうやって?OpenGLES他のスレッドでプリロードテクスチャ
答えて
リソース/ディスクからGLのレンダリングまでのテクスチャを取得するには、2つの手順があります。これらを分離して、ワーカースレッドのロードと計算作業のほとんどを可能にします。
最初のステップは、BitmapFactory.decodeResouce()のようなものを使用する、Javaレベルで実際にビットマップを作成することです。この部分はあなたが好きなスレッドで行うことができます。ロードが完了したら、そのビットマップをArrayListやキューなどにスローします。リストのアクセスを同期ブロックで囲むようにしてください。
第2のステップは、GLスレッドで実行されなければならないglGenTexturesを呼び出すことです。そのため、drawFrame()メソッドの開始時に、ビットマップを保存するArrayListのサイズを確認し、サイズが0より大きい場合は、glGenTexuresを呼び出して配列からビットマップを削除して再循環させます。
彼はむしろ 'drawFrame()'よりも 'surfaceCreated()'にテクスチャを読み込むべきです。 – Wroclai
@Pompe de velo - たくさんの読み込みがある場合は、ユーザーに何らかの読み込み/進捗インジケータを表示し、複数のdrawFrame()呼び出しでテクスチャを読み込むことが必要になります。数秒以上かかることがあるsurfaceCreatedでのすべての読み込みを実行すると、応答しない表示/ UIによってアプリがハングアップしてANRが発生している可能性があります。 – Josh
正しくないANRは、レンダリングスレッドではなくUIスレッドを遅延させる場合に発生します。しかし、 'surfaceCreated()'の読み込みは、それが一回の初期化を行う場所であるため、はるかに意味があります。 – Wroclai
- 1. 他のスレッド
- 2. OpenGLES +フレームバッファのアーティファクト
- 3. Androidのopenglesスクロールスクロール
- 4. Androidのopengles glBindTexture()コール
- 5. OpenGLES 1.xトゥーンシェーディング
- 6. OpenglESアルファテクスチャ深さ
- 7. iphone OpenGLESビデオテクスチャ
- 8. OpenGLES 3 CVOpenGLESTextureCacheCreateTextureFromImageでエラー-6683
- 9. 他のスレッド内でスレッドを開始する方法
- 10. スレッドが起動しない他のスレッドがビジー状態です
- 11. C#他のスレッドでコードを実行
- 12. OpenGLES Boneのアニメーションソリューションへのアプローチ
- 13. Android OpenGLES Render-to-Texture
- 14. Android OpenGLES 2.0 2Dレンダリング
- 15. GLKViewとOpenGLES 1.1のテクスチャ?
- 16. 先進のCore Animation/OpenGLESチュートリアルリクエスト
- 17. Android OpenGLESボーンアニメーションの問題
- 18. Unity、Google Play Console、OpenGLESのバージョン
- 19. どのように - Javaのスレッド他のスレッドへのアクセス(SWING)
- 20. あるスレッドから他のスレッドへの値の取得
- 21. UIスレッドとハンドラを使用する他のスレッドとの通信
- 22. バックグラウンドワーカーと他のスレッドとの基本的なスレッド化
- 23. アンドロイドOpenGLES 1.x CameraPreview to surfacetexture
- 24. OpenGLESテクスチャが消える
- 25. OpenGLES 2.0間違ったデプスバッファビット
- 26. メインスレッドのコンシューマと他のスレッドのプロデューサ
- 27. Delphi 2010の他のスレッドの実行ポイント
- 28. 他のすべての子スレッドのJava
- 29. OpenGLES 2.0:gl_VertexID相当ですか?
- 30. openglesで円を描く方法
私は別の質問への答えとして、別のスレッドにテクスチャをアップロードするためのJava専用ソリューションを記述しました:http://stackoverflow.com/questions/6318311/threading-textures-load-process-for-android-opengl- game/19740938#19740938 – Rodja