頂点のセットアップにOpenGL固定関数パイプラインを使用する場合、フラグメントプログラムは、固定関数の頂点セットアップとどのように互換性がありますか?これは通常、光源やテクスチャレイヤーの数などに依存すると思います。たとえば、単純な非テクスチャ1光源のゴローシェーディングフラグメントプログラムは、GLの固定関数シェーダーに代わるものとしてどのように見えるのでしょうか。
3 に答える
ShaderGenを見ることに興味があるかもしれません。説明から:
ShaderGen は、一連の固定機能状態の結果を模倣するシェーダーを自動的に生成できるプログラムです。このツールは、第 9 章で説明されている固定機能のシェーダー コードを検証するために使用されました。
ところで、固定関数と GLSL を混在させると、微妙なドライバーの問題が発生する可能性が高くなります。これはシェーディングを行うための「最もよく使われる方法」ではないので、バグがあるという良い変更があります (少なくとも私が試したときはそうでした)。必要なものが機能する場合は、素晴らしいです。それ以外の場合は、頂点シェーダーとフラグメント シェーダーを GLSL で記述した方がよいでしょう。私が聞いたところによると、最新の GPU のドライバーは、内部でシェーダーを使用して固定機能を実行しています。
通常のGL固定関数パイプラインでは、ライティングとゴローシェーディングはパイプラインの頂点ステージで完全に実行されるため(ラスタライザーの助けを少し借りて)、テクスチャリングがない場合、フラグメントシェーダーは単純なパスになります- (gl_FragColor = gl_Color;
)を介して、実際には何もしません。
これで、フラグメントごとのライティングを実行できます。これを実行する独自のフラグメントシェーダーを作成することで、指向性スポットライトなどが必要な場合にそれを実行することも理にかなっていますが、固定関数パイプラインとは関係ありません。