アップルは、フラグメントシェーダで計算されたUV座標を使用するテクスチャの読み込みを避けることを推奨しています。 (https://developer.apple.com/library/ios/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/BestPracticesforShaders/BestPracticesforShaders.html)フルスクリーンテクスチャからのサンプリング時に依存テクスチャの読み込みを防止する方法
ここで、私はいくつかの3Dモデルをレンダリングしており、関連するフラグメントシェーダではフルスクリーンテクスチャからサンプルする必要があるとします。サンプルの位置は、画面上の現在のフラグメントの位置に対応する必要があります。
この全画面テクスチャをサンプリングするためにUVを計算する最も簡単な方法は、gl_FragCoord.xy/u_viewportWidth
を使用することですが、Applesのガイドラインによれば、従属テクスチャの読み込みが導入されるようになりました。ピクセルシェーダでUVを生成します。
基本的に各頂点のスクリーン位置を計算し、UVを取得するためにビューポート分割を行い、この座標をフラグメントシェーダに変化として渡すことによって、UV計算を頂点シェーダにプルすることができます。しかし、私は、UV値が実際にハードウェアによって正しく補間されるかどうかについて疑問を呈します。 (これは有効なアプローチですか?)
それ以外の場合は、ピクセルシェーダーでUVを計算する必要はありませんか?
"* Appleは、フラグメントシェーダで計算されたUV座標を使用するテクスチャの読み込みを避けることを推奨します。*"いいえ、そうではありません。彼らは単に、それらを「認識」し、潜在的なパフォーマンスの影響を言います。シンプルなパフォーマンスの警告を「すべてのコストをかけてクリアに」と誤解しないでください。 –