私はlibpngを使って読み込んでいるPNGファイルが何千もあり、アプリケーションで使用するためにOpenGLESテクスチャを作成しています。これを行うと、iPhoneの読み込み時間が大幅に長くなります。ロード時間を短縮する方法はありますか?OpenGLESで使用するテクスチャにたくさんのpngファイルが読み込まれているため、読み込み時間が遅くなります
答えて
大きなテクスチャ(1024x1024)に複数のテクスチャを配置することができます。これは、しかし、texcoordsのいくつかの再計算が必要です。また、テクスチャパーツを描画時に使用する実際の解像度に近づけるようにしてください。つまり、テクスチャが画面の高さの1/2(240ピクセル)を満たし、256x256のテクスチャを使用するのに十分です。
さらに、より高度な方法(テストされていない)では、すべてのファイルを連結することができます(+ length + posを登録する)。mmap(..)
を使用してこのpng-dbファイルにアクセスします。次に、テクスチャーローディング関数がUIImage
に基づいている場合は、NSData
を使用してテクスチャーローディング関数を供給します。このようなmmap(..)
を使用すると、多くのファイルを開いたり閉じたりすることができず、データへのアクセスはOS VMマネージャの助けを借りて処理されます。
[注:ええ、iPhoneのネイティブPNGローダーがマングリング...そしてどれもネイティブリーダーが必要か、マングルされたファイルを連結かもしれないいくつかのPNGを必要とする代わりに]
あなたが必要になるだろうどのような順序知っていますか何千もの画像がありますか?おそらく、あなたのアプリが起動したときにそれらを数百だけロードして、あなたが行くにつれてバックグラウンドスレッドに多くをロードするかもしれません。
小さな画像をより小さなテクスチャにまとめることは、どの画像が一緒に使用されるかについてのパターンがある場合にのみ、良い考えになります。
私が通常やったことは、マネージャーを通してテクスチャの遅延読み込みを処理するオブジェクトを構築することです。起動時に私は既知のテクスチャを登録し、ロード時に単純なIOを節約するために後で必要となるファイルシステム属性を解決します。その後、必要に応じて取り込みます。
処理速度を上げるために、メカニズムも、私は "この一連のイメージをロードして私に返します"と言っています。これは単純に、繰り返されるメソッド呼び出しのオーバーヘッドを削除することです。実際、私のシングルロードソリューションはバッチロードの周りの単なるラッパーです。
私は自分の簿記(オブジェクトの作成、ファイルシステムの属性の発見など)をキャッシュしますが、必要になるまで重い作業を延期します。実行時にアプリケーションにテクスチャを読み込むと、ストレージからテクスチャメモリにテクスチャを埋め込むフォールトがトリガされます。手前にある多くのテクスチャを持つシーンを読み込んでいる場合、プリフェッチで非常に共通のテクスチャのセットをロードしますが、比較的まれに見えるテクスチャをランタイムに延期します。
実際には、これは確率のために働く傾向があります - 開始時に負荷を強制すると、一度にすべてのテクスチャに遭遇することが保証されますが、それらをまばらに読み込むと予想されるユーザレイテンシは、時間待ち時間*開始からある時間ウィンドウ内にロードされる確率。テクスチャを読み込まないように開始時間プリフェッチを最適化すると、予想されるUI待ち時間が大幅に短縮されます。
さらに、NSURLConnection:connectionWithRequest:delegate:を使用して、テクスチャをストレージからロードすることを検討してください。これは非同期であり、最大のものを非同期にロードし、小さいものを同期的にロードして、ファイルシステムフェッチ/テクスチャの解凍中にIO/CPUアイドル要因を利用するように要求できます。同時)。 iPhoneは非同期ファイルシステムアクセスをうまく処理できない可能性があるので、これをテストする必要があります。
いつでも、私は、現在の時点で必要とされるテクスチャをすぐにロードするプログラムにpngファイルからのイメージをロードするだけです。言い換えれば、私は一度にすべてのファイルを読み込まない。しかし、任意の時点で、私は少なくとも1000 pngが必要です。 – CustomAppsMan
NSURLConnectionまたはスレッドを使用すると、複数のpngファイルを同時に読み込むのではなく、それをシリアルで実行する必要があります。 – CustomAppsMan
- 1. Instagramの埋め込みが遅い、まったく読み込まれない
- 2. 埋め込み動画が多すぎるため、ウェブサイトの読み込みが遅くなります
- 3. イメージの読み込みが遅くなりました
- 4. ウェブページアセットの読み込み時間が長くなります
- 5. テキストファイルの読み込みが失敗してフォーマットが遅くなりましたが遅くなりました
- 6. 最初の読み込み後にMongoDBの読み込みが遅くなる
- 7. Django 1.9.5とeasy_thumbnailsの読み込み遅れが遅くなりました。
- 8. 読み込みインクルードファイルがPHPスクリプトの読み込みを遅くしますか?
- 9. Javaアプレットを使用しているため、ページの読み込みが遅くなりますか?
- 10. レールの読み込み時間が遅い3.2 - デバッグでレールの読み込みが2回表示される
- 11. 読み込み時にアクティビティが遅くなる
- 12. JavaScriptのエラーによりウェブサイトの読み込み時間が遅くなる可能性があります
- 13. 読み込み時にGridviewを読み込めません
- 14. eclipseLinkとJPAで@OneToManyコレクションの読み込みが遅くなりました
- 15. 埋め込みswf自動読み込み時に読み込まれる
- 16. ページの読み込み時間がわかりにくくなる
- 17. 遅延読み込みでICollectionプロパティが読み込まれない
- 18. Crystalレポートの読み込み時間が長くなる
- 19. Webriverのインスタンスが読み込みに多くの時間がかかります
- 20. VS2012のASP.NETプロジェクトでシンボルの読み込みが遅くなる
- 21. ファイルを読み込めませんでした:assets/libgdx128.png
- 22. IEでカスタムフォントの読み込みが遅くなる
- 23. エミュレータ:エラー:OpenGLESエミュレーションライブラリを読み込めませんでした。
- 24. 読み込み/書き込み - テキストファイルまたはPostGresより詳しくお読みください
- 25. herokuのホストされたサイトでCSS読み込みが遅い
- 26. 辞書にXML読み込みが遅くなる
- 27. YouTube APIで読み込み時のサイトが大幅に遅くなる
- 28. STLが読み込まれたメッシュにテクスチャをオーバーレイする
- 29. 最初の読み込み時にChromeのスタイルが正しく読み込まれない
- 30. スクロールビュー内のWebビュー最初の読み込み時にHTMLが正しく読み込まれない
テクスチャの数はそれよりも少ないものの、それだけ大きなものになるのはなぜですか?テクスチャに多くのオーバーヘッドがありますか? – CustomAppsMan
画像が四角形でなく、高さ/幅が2の累乗でない場合、それらの画像を結合するテクスチャメモリを少なくしても、各ファイルを開く際に余分な作業が必要になります。 –