3

JPG 形式から非常に大きなテクスチャをロードしています。iOS5 以前では、Apple サンプルの Texture2D クラスを使用して JPG テクスチャを RGB888 から RGB565 形式に変換し、必要なメモリ領域を半分にしました。その後、glTexImage2D を使用して RGB565 形式で GPU にアップロードされます。

iOS5 では、新しい GLKTextureLoader を使用するように呼び出しを変換しています。ただし、JPG にはアルファ チャネルがなくても、RGB888 を使用しているだけで、GPU で 2 倍のメモリを占有しているようです。

GPU にアップロードするときに GLKTextureLoader に RGB565 を使用させる方法はありますか? 現在 [GLKTextureLoader textureWithContentsOfFile:jpgFile] を使用しています。また、[GLKTextureLoader textureWithContentsOfData:data] を試して、生の RGB565 ビットマップの NSData を渡しましたが、「{GLKTextureLoaderErrorKey=画像のデコードに失敗しました}」というエラーが表示されます。

4

1 に答える 1

7

「textureWithContentsOfData」は、アップルがまだ実装していない壊れたメソッドのようです(注:ドキュメントが欠落しています-それが受け入れるものを示す仕様はありません)-私が試したすべての標準NSData入力で失敗します。

次に、それらを取得し、標準の gl* メソッド呼び出しを使用して OpenGL に直接渡したところ、正常に機能したため、バグは GLKit にあります。

私は Apple にサポート リクエストを記録し、彼らの方法を説明し、それが受け入れるものを文書化するように求めました。それまでは、GLTextureInfo クラスを無視することを強くお勧めします (これは良いアイデアですが、非常にバグが多いため、その価値はありません。このクラスを削除すると、5 倍のパフォーマンスが即座に改善されました!)


更新: Apple からの応答 (言い換え) "うーん。どちらもわかりません。バグとして記録してください"。

...および: バグを受け取ったときの Apple からの応答: 「これはバグではありません。設計どおりです。それを文書化する必要はありません。それが何をするかは明らかです。」

(彼らの「明白な」は、PNG、JPG、または PVRのみのデータを送信する必要があることでした...(そして、PVR は特定のハードウェアで実行している場合にのみ許可されます)他のものはクラッシュします。)

彼らの最終的な提案は、OpenGL テクスチャ呼び出しを使用してテクスチャをアップロードすることです。つまり、テクスチャの読み込みに関しては、GLKit を完全に無視します。通常、OpenGL テクスチャ呼び出しは、Apple の GLKit TextureInfo クラスよりも 10 倍高速です。真剣に-使用しないでください、それはひどいです:(。

于 2013-03-01T20:47:39.790 に答える