CG プログラムを GLSL プログラムに変換しようとしています。
これまでに行ったことは正しいように見えますが、GLSL シェーダーは正しくない出力を出力します。不正な動作は、一連のテスト イメージによって定義されます。
私が調査している唯一の暗い点は、f3texRECT
私が翻訳した関数ですtexture
。ただし、に関するドキュメントが見つかりませんf3texRECT
。
誰かが光を当てることができますか?
f3texRECT() は、sampler2D ではなく sampler2DRect を使用してtexture()にマップされるように見えます。これは、テクスチャ座標が正規化されていないことを意味します ([0..1] ではなく [0..textureSize-1])。"f3" プレフィックスは、結果が 3 チャンネル カラーであることを意味します。古いバージョンの GLSL には、この目的のために textureRect() 関数がありましたが、廃止されました。
f3texRECT(..args..)
は Cg とまったく同じですtexRECT(..args..).xyz
。これは、完全に一般的なスウィズルがなかった古い HSL からの引き継ぎとして存在します。
GLSL では同等の関数はtexture
であるため、そこでも使用する必要がtexture(..arg..).xyz
ありますが、引数はわずかに異なる場合があります。
テクスチャ呼び出しを Cg から GLSL に変換する際の主な混乱は、シャドウ テクスチャを扱うことです。Cg でのシャドウ テクスチャ ルックアップは通常のサンプラーを使用しますが、tex
呼び出しには座標に余分なコンポーネントがあります。GLSL には、代わりに個別のシャドウ サンプラ タイプがあります。したがって、Cg を GLSL に変換するときは、どのテクスチャが「通常の」テクスチャで、どのテクスチャが「シャドウ」テクスチャであるかを、その使用方法に基づいて把握する必要があります。通常のルックアップとシャドウ ルックアップの両方に単一のテクスチャを使用するまれなケースでは、GLSL 用に 2 つのサンプラーに分割する必要があります。