大きなテクスチャの TON を使用する必要がある iOS opengl es 2.0 アプリがあります。理想的には 4096x4096 です。テクスチャに関するすべての情報を含む構造体配列があり、それぞれを使用する必要があるため、glGenTextures で新しいテクスチャ ID を作成し、そこにイメージをロードし、uiimage を解放します。すべてうまくいきます。
私のアプリでは、UI や画像処理などに大量のテクスチャを使用しています。15 個のうち 4 ~ 5 個が 4k x 4k です。残りは小さいです。そして、必要に応じてロードされるこれらのテクスチャも 4k です。
それらの約 4 ~ 5 番目をロードすると、アプリがハードにクラッシュします。コンソールやデバッグはありません。次のテクスチャを読み込もうとしている途中で踏み台に戻るだけです。
メモリ リークはありません。計測器を実行しました。ARCを使用しています。オーガナイザーからクラッシュ レポートを投稿できますが、あまり情報がありません。私のアプリのrpagesが170504だったというだけです。
画像読み込みコードを投稿することもできますが、これはすべてのアプリで何年も使用してきたものと同じコードです。新しいことは、システムをハードにプッシュし、多くの大きなテクスチャをロードしようとすることです。
Q1: 大量の大きなテクスチャを使用した経験がある人はいますか?
そこで、1024x1024 でプレビュー解像度を作成し、次に 4096 で最終解像度を作成する必要があるという事実に解決しました。4k 画像はすべて一度に 1 つずつ同じテクスチャに読み込まれ、使用されてから次の画像に進みます。
画像ローダーにプレビュー パラメータを書き込み、設定すると、読み込み中に画像が 1024 に収まるように縮小されます。これで、4 日または 5 日にクラッシュする代わりに、「終日」テクスチャを追加できます。私の推測では、以前の 16 倍の回数を実行できると思います。でも、一度に20~30個くらいは必要です。(のみ!) これまでのところ、メモリ警告やクラッシュなしで 20 を試しました。
ただし、アプリが実行され続けると、テクスチャが一意のテクスチャ ID で読み込まれるため、ある時点で、次のものを読み込むために不要になったものをアンロードする必要がある場所にヒットします。これはおそらく非常に単純ですが....
Q2: 不要になったテクスチャ ID のテクスチャを解放するにはどうすればよいですか?
Q3: 開いている gl テクスチャを解放する必要があるというメモリ警告が表示されますか?
Q4: テクスチャは PVR チップにロードされませんか? 彼らは携帯電話のメモリを占有していますか?
ありがとう!