私はlibGDX(Androidおよびデスクトップ用)のマルチタイルベースのゲームのクライアントを作成しています。 ゲーム世界は、大きな矩形の表示領域に描画される数千の小さな32x32 png画像で構成されています。イメージは、必要に応じてソケット接続(ネットワーク)を介してダウンロードされます。libGDX:多くの小さな画像をlibGDXに保存して、素早く描画できます。
これらのイメージを「メモリ」に保存するための最速(最もリソース効率の良い)方法は何ですか?
これまでは、32x32の各画像をテクスチャにロードしてメモリに無期限に保存する非常に単純なアルゴリズムを実装しました。 (純粋な偶然の私のイメージは、2の累乗であるサイズを持っています。)動作しているようですが、これは非常に非効率で、古いデバイスや何かのGPUリソースを超える可能性があります。
私はTextureAtlasを認識していますが、コンパイルされたアンドロイドアプリにパックされて保存されている静的画像に対してのみ機能するようです。ネットワーク上でイメージを動的に受け取るので、これは私のためにはうまくいかないと思います。
多くの小さな画像をFrameBufferにレンダリングし、TextureRegionsのソースとしてこれを使用することを提案しているこの記事はlibgdx SpriteBatch render to textureです。これは私にとって有望なようです。これは良い解決策ですか? 良い方法がありますか?
私の小さな画像を描画して大きなPixmapに保存するのが参考になるのではないかと思います。上記のように、FrameBufferを描画するよりも、これはおそらく良いアプローチですか? 私がドキュメントから理解しているように、Pixmapは純粋にメモリベースです。それはおそらくグラフィックスリソースを必要としないため、テクスチャへの読み込みが高価な操作であるため、速度が遅くなる可能性があるため、利点になるかもしれません。これについての考え?
ありがとうございます。 FrameBuffersを使用するのは合理的にうまくいくように見えますが(すでにテスト済みです)、これは簡単な解決策のようです。 –
TextureAtlasのソースコードを見て、何千もの小さなテクスチャを配列に格納すること以外何もしていないと思います。これは素敵なファサードの背後にある私の素朴な実装です:-)私はFrameBuffer実装を引き続き使用します。これは、Textureオブジェクトの量を大幅に減らすためです。 –
実際にはそうではありません:) textureatlasを使用する理由は、1つの大きなテクスチャを使用することです。まずレンダリングするときに、GPUにグラフィックスを送信してパフォーマンスに影響を与えることです。 textureatlasでは、テクスチャを一度だけ送ります。 Google for SpriteBatchの 'render calls' –