0

OpenGL ES 2.0 を含むソフトウェアを作成しています。GLSL を使用してアドオンの特殊効果を使用して写真を表示するだけです。

iPhone 4、iPhone 4s、および IOS7 を搭載した iPhone 5 では、すべてが正常に機能し、シェーダーのパフォーマンスも良好でした。しかし、IOS7 がインストールされた iPhone 5S でソフトウェアをテストしたところ、OpenGL は、私が作成したすべての GLSL シェーダーに対してクリア カラー (glClearColor で変更可能) しか提供しませんでした。最新のデバイスで動作できないことは、確かに許されません。

iPhone 5S でのもう 1 つの異常な現象は、使用されている opengl プログラムがコンパイルされた後(ユーザーが特殊効果を切り替えるたびに新しい opengl シェーダー プログラムがコンパイルされる)、 glDrawElementsへの最初の呼び出し(それが重要な場合は VBO を使用しています)がブロックされることです。現在のスレッドを約 10 秒間表示します。

XCode 5 と 4.6 でコンパイルしようとしましたが、どちらも同じ結果になりました (iPhone 5s 以外のすべてのデバイスで問題ありません)。

このプロジェクトは iPhone 5 にインストールされた IOS7 で動作するため、OS のバージョンや SDK のバージョンに問題はありません。新しい GPU が原因である可能性があると思われますが、それを修正する方法や、コードのどこで問題が発生しているかをテストする方法さえわかりません。そのglDrawElementsの問題を見つけるだけで丸一日かかりました。

ソフトウェアのコードは膨大で、質問にすべてを掲載することは不可能です。誰かが私に何か助けやアイデアを提供してくれたら、私は感謝します.

質問をより簡潔にするために、私の OpenGL シェーダーは最新の iPhone GPU で失敗するようです。だから私は疑問に思っています:

  • 最新の Apple A7 GPU カットオフは、一部の OpenGL ES 2.0 機能をサポートします
  • iPhone 5s での頂点バッファー オブジェクト (vbo) の作成にはいくつかの制限があります。
  • iPhone 5s では、RenderBuffer、FrameBuffer、TextureBuffer (マルチパス シェーダーの実行に使用) の使用に違いがあります。

これらはすべて、私が考えることができる疑わしい部分ですが、レンダリングされたフレームを 1 つも取得していないため、それらをテストする方法がわかりません。

4

1 に答える 1

1

iPhone 5 と 5S の大きな違いは 64 ビット アーキテクチャです。フロートをシェーダーに渡す際に、アプリで問題が発生しています。64 ビット モードで 0.8 を渡すと、-1.58819e-23 としてシェーダーに渡されます。この問題に関する新しい質問を開始しようとしていますが、OpenGL ES フレーム キャプチャを使用して実行時に値を確認することをお勧めします。

https://developer.apple.com/library/mac/recipes/xcode_help-debugger/articles/debugging_opengl_es_frame.html

于 2013-10-31T11:13:07.137 に答える