新しいOpenGL(3.0および4.0)の新バージョンでは、のgl_Vertexのようなビルトインの頂点属性は非推奨のです。実際にレンダリングする「新しい方法」は、位置、色などの独自の頂点属性を指定し、これらのカスタム属性をバッファにバインドすることです。最新のOpenGLシェーダは、相互に互換性を持たせるためにどのように書き込まれるべきですか?
私の質問はこれです:どのようにレンダリングコードとシェーダを密接に結合せずにこれを行うことができますか? 「位置」を頂点の位置として使用するシェーダーを記述する場合、シェーダーを使用するホストコードはそれを知っていて、頂点データを「位置」として渡す必要があります。私が "vertex_pos"で頂点データを取るために書かれた別のシェーダを使用したいのであれば、そのシェーダを最初に書き直すか、代わりに頂点データを "vertex_pos"として送るようホストコードを変更する必要があります。
すべてのシェーダが使用する標準の頂点属性とフラグメント属性のベストプラクティス名がありますか?または、あるエンジン用に書かれたシェーダーが修正なしに別のエンジンで動作しないように、バルカン付エンジン固有の標準がありますか?あるいは、一般的に、すべてのオブジェクトがカスタムシェーダと一致する独自のレンダリングコードを必要とするなど、標準が全くありませんか?
実際、そうではありません。 GLSLは** gl_で始まる任意の**名前を予約します。コアコンパイラで "gl_Vertex"を使用できる場合は、仕様に準拠していません。 1.50仕様は、宣言された型のプロパティを変更するためにのみ有効な再宣言構文を明確にしています。だから、あなたもそれらを再宣言するべきではありません。 –
@Nicol:ここで言語の法則が始まります:一部の人は、推奨されていない変数名を互換性プロファイルのあらかじめ定義された識別子と見なし、1.50 GLSLプログラムでそれらを使用すると再宣言を変更します。 IMHO仕様はこれについてはっきりしていませんが、 '#version'の§3.3はコアが「互換性名が利用できません」という意味であるようです。安全なものにしたいなら、彼はプリプロセッサ '#define gl_Vertex glVertex'を使用し、その名前をコアプロファイルで使用できます。 – datenwolf