Glslシェーディングを学んでいますが、さまざまなファイル形式に遭遇しました。頂点シェーダーとフラグメントシェーダーを与える人々を見てきました.vert
および.frag
拡張。しかし、私も見た_.vsh
および.fsh
拡張機能、さらには両方のシェーダーを1つの.glsl
ファイル。だから、標準のファイル形式があるのか、それとも「正しい」形式はどちらなのか疑問に思っています。
GLSLシェーダーには標準のファイル拡張子はありません。最も一般的なものはおそらく.vert
および.frag
。これらは、3D Labsが一部のツールで使用した拡張機能です。しかし、それはあらゆる形式の標準拡張機能についてのものです。
仕様には公式の拡張機能はありません。 OpenGLは、ファイルからのシェーダーの読み込みを処理しません。シェーダーコードを文字列として渡すだけなので、特定のファイル形式はありません。
ただし、 glslang 、KhronosのリファレンスGLSLコンパイラ/バリデーターは、次の拡張機能を使用して、ファイルのシェーダーの種類を決定します。
- .vert-頂点シェーダー
- .tesc-テッセレーションコントロールシェーダー
- .tese-テッセレーション評価シェーダー
- .geom-ジオメトリシェーダー
- .frag-フラグメントシェーダー
- .comp-計算シェーダー
拡張子によるファイルタイプの識別は、Windows固有のものです。他のすべてのオペレーティングシステムは異なるアプローチを使用します。MacOSXは、ファイルシステムエントリの特別なメタデータ構造にファイルタイプを保存します。ほとんどの* nixは、既知の「マジックバイト」のデータベースに対して内部構造をテストすることでファイルを識別します。ただし、テキストエディターは拡張機能を使用します。
とにかく、GLSLソースは他のプログラムソースファイルとまったく同じです:プレーンテキストであり、それがファイルタイプです。
必要に応じて選択できる拡張子。次の命名法を使用します。
しかし、それは私の選択であり、技術的には私のプログラムは命名または拡張スキームさえ強制しません。ネーミングは、人間がその内容を読んで知るためのものです。共通の主要な拡張子を持つためには、1つのファイル拡張子セットのみに構文の高度なルールを設定する必要があります。
他の人が言ったように、厳密な意味での正しい答えはありません。 Sublime(v2およびv3で確認済み)も、構文の強調表示と検証のために.vertと.fragを想定していることに言及する必要があります。
シェーダーを記述する方法は2つあります。
頂点シェーダーとフラグメントシェーダーのコンテンツは、char *
変数を使用して、シェーダーをコンパイル、リンク、およびプログラムにアタッチします。
別の方法は、好きな拡張子で別の頂点とフラグメントシェーダーファイルを記述し、それを読み取って、シェーダーをプログラムにコンパイル、リンク、およびアタッチすることです。
したがって、.vert/.frag、.vsdr/.fsdrなどの命名規則は、読み方を知っている限りすべて有効です...