Ich lerne glsl-Schattierung und bin auf verschiedene Dateiformate gestoßen. Ich habe Leute gesehen, die ihre Vertex- und Fragment-Shader .vert
und .frag
-Erweiterungen gegeben haben. Aber ich habe auch gesehen .vsh
und .fsh
Erweiterungen und sogar beide Shadern zusammen in einer einzigen .glsl
Datei. Ich frage mich also, ob es ein Standarddateiformat gibt oder auf welche Weise das "richtige"?
127
.glslv
und.glslf
bei der Auswahl der Syntaxhervorhebung. Das ist der einzige Ort, an dem ich gesehen habe, wo es darauf ankommt.Antworten:
Es gibt keine Standarddateierweiterung für GLSL-Shader. Die häufigsten sind wahrscheinlich
.vert
und.frag
, da dies die Erweiterungen sind, die 3D Labs in einigen ihrer Tools verwendet hat. Aber das war's auch schon für jede Form von Standarderweiterung.quelle
.hpp
vs..cpp
?.h
vs..c
? Es gibt mehr Syntax und semantische Unterschiede zwischen Vertex- und Fragment-Shadern als zwischen C / C ++ - Header- und Quelldateien..vert
(Scheitelpunkt),.frag
(Fragment),.tesc
(Tessellationssteuerung),.tese
(Tessellationsbewertung),.geom
(Geometrie),.comp
(Berechnung).Es gibt keine offizielle Erweiterung in der Spezifikation. OpenGL kann keine Shader aus Dateien laden. Sie übergeben den Shader-Code einfach als Zeichenfolge, sodass es kein bestimmtes Dateiformat gibt.
Allerdings glslang Referenz GLSL - Compiler / Validator, Khronos, verwendet die folgenden Erweiterungen welche Art von Shader , um festzustellen , dass die Datei für:
quelle
Das Identifizieren des Dateityps anhand der Erweiterung ist eine spezielle Sache für Windows. Alle anderen Betriebssysteme verwenden unterschiedliche Ansätze: MacOS X speichert den Dateityp in einer speziellen Metadatenstruktur in den Dateisystemeinträgen. Die meisten * Nixe identifizieren Dateien, indem sie ihre interne Struktur anhand einer Datenbank bekannter "magischer Bytes" testen. Texteditoren verwenden jedoch die Erweiterung.
Wie auch immer, GLSL-Quellen sind wie jede andere Programmquelldatei: einfacher Text, und das ist ihr Dateityp.
Die Erweiterung können Sie nach Belieben auswählen. Ich benutze folgende Benennung:
Aber das ist meine Wahl und technisch gesehen erzwingen meine Programme nicht einmal ein Namens- oder Erweiterungsschema. Die Benennung ist für Menschen zu lesen und zu wissen, was darin enthalten ist; Um eine gemeinsame Haupterweiterung zu haben, muss ich eine Syntax-Highlighing-Regel für nur einen Dateierweiterungssatz haben.
quelle
com.stackoverflow.file
, die als Metadaten gespeichert wird. LaunchServices versucht zuerst, es vom MIME-Typ zu erraten, wenn der Metadateneintrag vorhanden ist. Wenn nicht, wird nach der Erweiterung gesucht. Wenn es nicht übereinstimmt, sucht es nach einem HFS-Erstellungscode. Wenn es keine gibt, gibt es auf. LaunchServices versucht niemals, eine Datei anhand ihres Headers oder ihrer magischen Bytes zu identifizieren.Wie andere bereits erwähnt haben, gibt es im engeren Sinne keine richtige Antwort. Es ist zu erwähnen, dass Sublime (bestätigt für v2 und v3) auch .vert und .frag für die Hervorhebung und Validierung der Syntax erwartet.
quelle
vs, fs, gs, vsh, fsh, gsh, vshader, fshader, gshader, vert, frag, geom, tesc, tese, comp, glsl
. Es gibt also eine Auswahl :)Es gibt zwei Möglichkeiten, Shader zu schreiben.
Sie können den Inhalt des Vertex-Shaders und des Fragment-Shaders in einer
char *
Variablen speichern und den Shader kompilieren, verknüpfen und an ein Programm anhängen.Eine andere Möglichkeit besteht darin, die separate Vertex- und Fragment-Shader-Datei mit einer beliebigen Erweiterung zu schreiben und zu lesen, um den Shader zu kompilieren, zu verknüpfen und an das Programm anzuhängen.
Die Namenskonvention wie .vert / .frag, .vsdr / .fsdr usw. ist also alle gültig, solange Sie wissen, wie man sie liest ...
quelle
Wie bereits in mehreren Antworten erwähnt, gibt es wirklich keinen Standard. Es liegt an Ihnen, den Ansatz zu wählen, der für Sie am hilfreichsten ist.
Ich kann den Vorteil der Verwendung typspezifischer Shader-Erweiterungen erkennen, bevorzuge jedoch die Verwendung der Erweiterung .glsl für alle Shader-Typen, da Sie nur einmal definieren müssen, wie die Shell die Datei verwendet.
In ähnlicher Weise ist dies auch eine gute Option, wenn Sie Ihre Shader-Dateien in Notepad ++ bearbeiten, da Sie sie so konfigurieren können, dass die sprachspezifische Syntaxhervorhebung automatisch auf alle Ihre Shader-Dateien angewendet wird, indem Sie nur eine Dateierweiterung angeben.
Der Nachteil dieses Ansatzes ist, dass Sie Ihre eigene Namenskonvention verwenden müssen, um den Typ des Shaders anhand seines Dateinamens zu bestimmen, aber für mich überwiegen die Vorteile die Kosten.
quelle