2011-11-14 20 views
1

私は、ゲームのシーンのコンストラクタで、すべてのゲームデータを同時にロードしようとしています。しかし、テクスチャの読み込みは、OpenGLコンテキストでのみ動作するため、失敗します。たとえば、loadメソッドがdraw frameまたはsurfacechangedから呼び出された場合です。しかし、私は、ドローフレームが最初に呼び出されたときなどにテクスチャを読み込むのは醜いと思う。それで、どういうわけか私の読み込み部分をOpenGL関数から分離することが可能ですか?テクスチャをランダムにロードする

答えて

3

私はまったく同じ問題を抱えています。 私の解決策はproxy texturesです。これは、メモリまたはファイルのデータを使用してテクスチャを作成するときに、そのメモリデータまたはファイルパスのコピーを保持するダミーテクスチャを作成していることを意味します(高速ロードのためにデータをメモリにプリロードできます)。

その後、レンダラーがglBindTextureのようなbind()を呼び出すと、ロードするデータがあるかどうかをチェックします。存在する場合は、新しいテクスチャを作成してデータをロードします。

私の場合は、どのスレッドからでもいつでもテクスチャを作成できるので、このアプローチは私にとって最適です。

しかし、あなたはonSurfaceCreatedまたはonSurfaceChanged

に同じバッファに適用されることだけで行うことができますすべてのテクスチャをプリロードしたい場合。

もう1つのアプローチは、ネイティブアクティビティを使用する方法です(NDKの例を参照)。この場合は、手動でコンテキストを処理できますが、APIレベル9が必要です。

1

しかし、ドローフレームが最初に呼び出されたときなどは、読み込みに醜いと思います。

実際に遅延テクスチャローディングは、最もエレガントな方法です。画面の読み込みを中断することなく世界を旅するゲームの重要な要素の1つです。すぐに全世界を一度に読み込もうとしないでください。すぐに目に見えるようになります。画素バッファオブジェクトを使用して、非同期で処理を行います。

関連する問題