OpenGL ベースの 2D ゲームを作成しています。アセットをロードするロード画面を作成したいと考えています。何かを描画して、何かが読み込まれていることをユーザーに示したいと思います。しかし、asynctask のような別のスレッドを使用してテクスチャをロードできないことを知りました。だから私はそこに立ち往生しています。アセットをロードするロード画面を作成するにはどうすればよいですか?
2 に答える
たぶん、アンドロイドopenglゲームのスレッドテクスチャロードプロセスに対して受け入れられた答えのようなものを使用できます
つまり、別のスレッドがテクスチャをメモリにロードし、メイン スレッドがそのテクスチャの glTexImage2d 呼び出しを実行し、他のスレッドが別のテクスチャのロードを開始する、などです。メイン スレッドは、各 glTexImage2d 呼び出しの後に、画面上の進行状況メーターを更新することもできます。進捗レポートは少し大雑把ですが、どれだけ正確である必要があるかわかりません。
「ロード」の意味によって異なります。ロードは 2 段階のプロセスです。
- イメージを (メイン) メモリにロードします。これは、どのスレッドからでも実行できます。
- イメージをビデオ メモリにロードして、テクスチャを作成します。これは GL スレッドから行う必要があります。
テクスチャの作成はglTexImage2d
、FPS に関して一時的に少し遅くなる可能性がありますが、これは通常、特に (静的な) ロード画面を表示している場合は問題になりません。
したがって、原則として、スプラッシュ スクリーンが静的な場合 (つまり、何も動かないため、FPS は問題にならない)、GL スレッドですべての読み込みを行うことができます。
- スプラッシュ スクリーン アセットをメモリにロードする
- スプラッシュ スクリーン テクスチャの作成とスプラッシュ スクリーンの描画
- ゲーム アセットをメモリに読み込む
- ゲーム画面テクスチャ作成&ゲーム画面描画
ただし、スプラッシュ スクリーンが動的な場合は、別の読み込みスレッドで 3. を実行する必要があります。それが完了したら、GL スレッドでゲーム テクスチャを作成します。これには、ロード スレッドから GL スレッドに、アセットのロードでテクスチャ作成の準備ができていることを通知する必要があります。