Was ist die richtige Dateierweiterung für GLSL-Shader? [geschlossen]

127

Ich lerne glsl-Schattierung und bin auf verschiedene Dateiformate gestoßen. Ich habe Leute gesehen, die ihre Vertex- und Fragment-Shader .vertund .frag-Erweiterungen gegeben haben. Aber ich habe auch gesehen .vshund .fshErweiterungen und sogar beide Shadern zusammen in einer einzigen .glslDatei. Ich frage mich also, ob es ein Standarddateiformat gibt oder auf welche Weise das "richtige"?

Samssonart
quelle
10
Soweit ich weiß, haben sie keine "richtigen" Erweiterungen, da OpenGL sie sowieso nicht von der Festplatte liest.
Zneak
2
Einige Leute nennen sie .vs und .fs (und .gs), um deutlich zu machen, was drin ist. Aber wie zneak sagte, ist es wirklich egal, es gibt keine "richtige" Sache.
Damon
11
GEdit verwendet .glslvund .glslfbei der Auswahl der Syntaxhervorhebung. Das ist der einzige Ort, an dem ich gesehen habe, wo es darauf ankommt.
Piotr Praszmo

Antworten:

90

Es gibt keine Standarddateierweiterung für GLSL-Shader. Die häufigsten sind wahrscheinlich .vertund .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.

Nicol Bolas
quelle
20
Ich denke nicht, dass .vert | .frag gute Erweiterungsnamen für Shader sind. Die Erweiterung identifiziert die allgemeine Klasse einer Datei. Sie hätten sie wahrscheinlich vertex.glsl und fragment.glsl nennen sollen.
Autodidact
5
Ich war auch überrascht, aber gibt es keinen kleinen Unterschied in der Syntax zwischen Vertex- und Fragment-Shadern, @SandeepDatta? Auf die gleiche Weise, wie .h und .c viele Gemeinsamkeiten haben, werden sie jedoch auf unterschiedliche Weise verwendet.
Joseph Humfrey
7
@SandeepDatta .hppvs. .cpp? .hvs. .c? Es gibt mehr Syntax und semantische Unterschiede zwischen Vertex- und Fragment-Shadern als zwischen C / C ++ - Header- und Quelldateien.
Miles Rout
1
@ MilesRout Nicht einmal über .cc zu sprechen
42
GLSLang, auch als GLSL Reference Parser oder Reference Compiler bekannt , ist eines der von 3Dlabs entwickelten Tools . Es ist sowohl auf opengl.org als auch auf khronos.org als SDK-Tool aufgeführt. Die README- Liste listet die Dateierweiterungen auf, die für Shader-Dateien erwartet werden: .vert(Scheitelpunkt), .frag(Fragment), .tesc(Tessellationssteuerung), .tese(Tessellationsbewertung), .geom(Geometrie), .comp(Berechnung).
TachyonVortex
93

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:

  • .vert - ein Vertex-Shader
  • .tesc - ein Tessellation Control Shader
  • .tese - ein Tessellation Evaluation Shader
  • .geom - ein Geometrie-Shader
  • .frag - ein Fragment-Shader
  • .comp - ein Compute Shader
Oberst zweiunddreißig
quelle
18

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:

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

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.

Datenwolf
quelle
5
Downvoted, da OS X seit Jahren hauptsächlich die Dateierweiterung verwendet.
Frederik Slijkerman
6
@FrederikSlijkerman: Nein, das tut es nicht. MacOS X ist im Kern ein Unix, und Dateierweiterungen wurden dort nie zur Identifizierung verwendet. Ja, Standardtypen erhalten Standarddateierweiterungen, aber das ist nur eine Sache der menschlichen Lesbarkeit. Möglicherweise stützt sich der Finder bei einigen Typen auf Dateierweiterungen als Heuristik. Wenn es eine Datei jedoch nur anhand ihres Headers oder einiger magischer Bytes identifizieren kann, wird es diese verwenden. Wie jedes Unix-basierte System.
Datenwolf
3
+1 Ich nenne sie als Effekt-Name -fs.glsl oder Effekt-Namen -vs.glsl.
Legends2k
9
Mir ist klar, dass ich zwei Jahre zu spät für das OS X-Argument bin, aber ich hatte das Gefühl, ich sollte meine zwei Cent einwerfen. Alles über der UNIX-Ebene verwendet LaunchServices, um Dateizuordnungen zu bestimmen. Jede Datei hat eine Typkennung wie 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.
Zneak
2
Dies bedeutet, dass die häufigste Methode zum Bestimmen des Dateityps unter OS X die Erweiterung ist. Dies dient jedoch nur dazu, zu ermitteln, mit welcher Anwendung welche Datei geöffnet werden soll. Sobald die Anwendung die Datei öffnet, kann sie selbst entscheiden, was sie damit tun möchte, unabhängig davon, ob die Erweiterung für den Inhaltstyp korrekt ist.
Zneak
7

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.

Weavermount
quelle
2
Ich glaube, dass dies nur zutrifft, wenn Sie eine GLSL-Bibliothek in Sublime installiert haben, z. B. github.com/WebGLTools/GL-Shader-Validator - mein Standard-Sublime erkennt die Erweiterungen nicht.
Luft
Die Bibliothek, die Sie verlinkt haben, ist bei weitem die beliebteste (und möglicherweise einzige?) GLSL-Bibliothek für Erhabene, und ich habe das, was das erwartet, als das bezeichnet, was Erhaben erwartet. Wenn Sie das eine Übertreibung nennen, werde ich mich schuldig bekennen. Aber ja, Sie haben mindestens so viel Recht, wie ein erhabener Texteditor jedes Textdokument öffnet, während er Erweiterungen ignoriert, von denen er nichts weiß.
Weavermount
1
Ab heute ist sublime-glsl ( github.com/euler0/sublime-glsl ) das beliebteste GLSL-Plugin und akzeptiert die folgenden Erweiterungen : vs, fs, gs, vsh, fsh, gsh, vshader, fshader, gshader, vert, frag, geom, tesc, tese, comp, glsl. Es gibt also eine Auswahl :)
F Lekschas
-1

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 ...

user2439483
quelle
-2

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.

Lewis
quelle