In Cg セマンティクスは、特定の組み込みの固定機能属性と変数を使用して、属性と変数をエイリアスする方法です。Cg アトリビュートは何よりもまず、セマンティックのない一般的な頂点アトリビュートです。しかし、OpenGL では (古い非推奨の OpenGL のみ)、セマンティックを運ぶ特定の固定関数属性があります。たとえば、頂点の位置はglVertex
またはglVertexPointer
で設定され、頂点の法線はglNormal
またはで設定されglNormalPointer
ます。以前は単純なジェネリック属性にセマンティックPOSITION
またはNORMAL
Cg を与えることで、そのような固定機能属性チャネルからの値をソースにすることができます。
gl_Vertex
GLSL には、非推奨の固定関数属性の値を含む組み込みの頂点属性変数がありますgl_Normal
。しかし、前述のように、これらの固定機能属性チャネルは実際には非推奨であり、最新の OpenGL での使用は推奨されていません (または、コア プロファイルでさえ禁止されています)。代わりに使用する必要があるのは、glVertexAttrib
およびで設定される一般的な頂点属性ですglVertexAttribPointer
。それらは実際のセマンティックを持たず、特定の方法でそれらを使用するシェーダーによってのみセマンティックを取得します。しかし、古いアプリケーションを Cg から GLSL に移植する必要がある場合は、 or などの非推奨の組み込み属性を使用することが、gl_Vertex
orgl_Normal
などの Cg の属性セマンティクスの最適な代替手段POSITION
ですNORMAL
。
POSITION
同様に、clip-space の位置 (セマンティック?)のように、特別な意味を持ち、特別に処理する必要がある特定の変数があります。gl_Position
これらは、この場合のように、頂点シェーダーで書き込むことができる特別な可変変数に対応しています。gl_TexCoord[i]
また、非推奨の OpenGL には、やセマンティックなど、特定の固定関数の可変に対応する、書き込み可能な他の可変変数もありますTEXCOORDi
。これらを使用すると、シェーダーを固定機能のステージと簡単に接続できます。たとえば、頂点シェーダーを使用して固定機能のフラグメント処理を行うことができます。
したがって、これらの Cg セマンティクスを要約すると、GLSL の事前定義された特別な属性とさまざまな変数に実際に対応します。しかし、最新の OpenGL では、それらの特別な頂点属性のすべてと、これらの特別な可変変数のほとんどはもう存在しません。しかし、最初に GLSL と Cg が実際にどのように機能するかをもう少し深く掘り下げることをお勧めします。なぜなら、これら 2 つの間の移植はいくつかのキーワードを置き換えるほど単純ではないからです。