デバイスの RAM の量に基づいて調整したい、テクスチャが重い OpenGL ゲームがあります。私が持っている最高解像度のテクスチャは iPhone 4 または iPad2 で問題なく動作しますが、それ以前のデバイスではテクスチャのロード中にクラッシュします。これらのテクスチャの低解像度バージョンがありますが、それらをいつ使用するかを知る必要があります。
私の現在の戦術は、特定の古いデバイス (3GS には低解像度の画面があり、iPad にはカメラがありません) を検出し、iPad2 以降と iPhone 4 以降の高解像度テクスチャのみをロードすることです。 iPod touchのために何かをしてください。しかし、モデル検出は API やハードウェアの将来の変更に対して脆弱であるため、デバイス モデルをハード コーディングするよりも機能検出を使用したいと考えています。
私が検討しているもう 1 つの可能性は、最初に高解像度のテクスチャをロードしてから、メモリ不足の警告が表示された瞬間にそれらをドロップして低解像度に置き換えることです。ただし、返信する機会があるかどうかはわかりません。デバッグ コンソールに通知が表示される前にアプリが停止することがよくあります。
実行しているデバイスにテクスチャの高解像度バージョンをロードするための十分な RAM がないかどうかを確認するにはどうすればよいですか?
一歩下がって、OpenGL テクスチャ メモリに固有の、使用できる他の適応技術はありますか?
ノート:
利用可能なRAMの検出に関連する回答をオンとオフでSOで検索しましたが、基本的にはすべて、メモリ使用量をプロファイリングし、無駄を排除することをお勧めします(一時メモリの寿命とそのすべてを最小限に抑えます)。できる限り多くのことを行いましたが、高解像度のテクスチャを古いデバイスに押し込む方法はありません。
PVRTC はオプションではありません。テクスチャには、フラグメント シェーダーで使用されるデータが含まれており、ロスレス形式で保存する必要があります。