LibGDXを使ってゲームを作っています。必要に応じて、アセットをオンザフライで同時にロード/アンロードしたいと考えています。ただし、アセットがメイン スレッドに読み込まれるのを待つと、遅延が発生します。これを改善するために、ロードする必要があるアセット (テクスチャ、サウンドなど) を監視し、適切にロード/アンロードするバックグラウンド スレッドを作成しました。
残念ながら、AssetManager.update()
そのスレッドから呼び出すと、次のエラーが発生します。
com.badlogic.gdx.utils.GdxRuntimeException: java.lang.RuntimeException: No OpenGL context found in the current thread.
最初にメインスレッドでバックグラウンドスレッドを試してみましrun
たが、最初のいくつかの画面を処理しただけで、すべて正常に動作しました。アルゴリズムを変更して、最初から同じスレッドですべてをメモリにロードすることもできます。これも同様に機能します。ただし、どちらもバックグラウンド スレッドでは機能しません。
これを Windows ではなく Android で OpenGL ES 2.0 (奇妙な点で柔軟性があります) で実行すると、すべて正常に動作し、画像のピクセル寸法を取得することもできますが、テクスチャは black にレンダリングされます。
私の検索では、これはOpenGL コンテキストが単一のスレッドにバインドされているという問題であることがわかりましたが、それ以外にはあまりありません。これは、メインスレッドに押し込んだときにすべてが機能し、別のスレッドに配置したときに機能しない理由を説明しています. このコンテキストの問題を解決するにはどうすればよいですか?