web-dev-qa-db-ja.com

GLSLシェーダーの正しいファイル拡張子は何ですか?

Glslシェーディングを学んでいますが、さまざまなファイル形式に遭遇しました。頂点シェーダーとフラグメントシェーダーを与える人々を見てきました.vertおよび.frag拡張。しかし、私も見た_.vshおよび.fsh拡張機能、さらには両方のシェーダーを1つの.glslファイル。だから、標準のファイル形式があるのか​​、それとも「正しい」形式はどちらなのか疑問に思っています。

124
Samssonart

GLSLシェーダーには標準のファイル拡張子はありません。最も一般的なものはおそらく.vertおよび.frag。これらは、3D Labsが一部のツールで使用した拡張機能です。しかし、それはあらゆる形式の標準拡張機能についてのものです。

82
Nicol Bolas

仕様には公式の拡張機能はありません。 OpenGLは、ファイルからのシェーダーの読み込みを処理しません。シェーダーコードを文字列として渡すだけなので、特定のファイル形式はありません。

ただし、 glslang 、KhronosのリファレンスGLSLコンパイラ/バリデーターは、次の拡張機能を使用して、ファイルのシェーダーの種類を決定します。

  • .vert-頂点シェーダー
  • .tesc-テッセレーションコントロールシェーダー
  • .tese-テッセレーション評価シェーダー
  • .geom-ジオメトリシェーダー
  • .frag-フラグメントシェーダー
  • .comp-計算シェーダー
80

拡張子によるファイルタイプの識別は、Windows固有のものです。他のすべてのオペレーティングシステムは異なるアプローチを使用します。MacOSXは、ファイルシステムエントリの特別なメタデータ構造にファイルタイプを保存します。ほとんどの* nixは、既知の「マジックバイト」のデータベースに対して内部構造をテストすることでファイルを識別します。ただし、テキストエディターは拡張機能を使用します。

とにかく、GLSLソースは他のプログラムソースファイルとまったく同じです:プレーンテキストであり、それがファイルタイプです。

必要に応じて選択できる拡張子。次の命名法を使用します。

  • ts.glsl
  • gs.glsl
  • vs.glsl
  • fs.glsl

しかし、それは私の選択であり、技術的には私のプログラムは命名または拡張スキームさえ強制しません。ネーミングは、人間がその内容を読んで知るためのものです。共通の主要な拡張子を持つためには、1つのファイル拡張子セットのみに構文の高度なルールを設定する必要があります。

16
datenwolf

他の人が言ったように、厳密な意味での正しい答えはありません。 Sublime(v2およびv3で確認済み)も、構文の強調表示と検証のために.vertと.fragを想定していることに言及する必要があります。

7
Weavermount

シェーダーを記述する方法は2つあります。

頂点シェーダーとフラグメントシェーダーのコンテンツは、char *変数を使用して、シェーダーをコンパイル、リンク、およびプログラムにアタッチします。

別の方法は、好きな拡張子で別の頂点とフラグメントシェーダーファイルを記述し、それを読み取って、シェーダーをプログラムにコンパイル、リンク、およびアタッチすることです。

したがって、.vert/.frag、.vsdr/.fsdrなどの命名規則は、読み方を知っている限りすべて有効です...

0
user2439483