Quelle est l'extension de fichier correcte pour les shaders GLSL? [fermé]

127

J'apprends l'ombrage glsl et j'ai rencontré différents formats de fichiers. J'ai vu des gens donner leurs shaders .vertet .fragextensions de sommets et de fragments . Mais je l' ai aussi vu .vshet .fshextensions, et même les deux shaders ensemble dans un seul .glslfichier. Je me demande donc s'il existe un format de fichier standard, ou de quelle manière est le «bon»?

Samssonart
la source
10
Autant que je sache, ils n'ont pas d'extensions «correctes», car OpenGL ne les lira pas de toute façon à partir du disque.
zneak
2
Certaines personnes les appellent .vs et .fs (et .gs) pour rendre explicite ce qu'il contient. Mais comme l'a dit zneak, cela n'a vraiment pas d'importance, il n'y a pas de chose "correcte".
Damon
11
GEdit utilise .glslvet .glslflors du choix de la coloration syntaxique. C'est le seul endroit que j'ai vu où cela compte.
Piotr Praszmo

Réponses:

90

Il n'y a pas d'extension de fichier standard pour les shaders GLSL. Les plus courants sont probablement .vertet .frag, car ce sont les extensions utilisées par 3D Labs dans certains de leurs outils. Mais c'est à peu près tout pour toute forme d'extension standard.

Nicol Bolas
la source
21
Je ne pense pas que .vert | .frag sont de bons noms d'extension pour les shaders. L'extension est quelque chose qui identifie la classe générale d'un fichier. Ils auraient probablement dû les appeler vertex.glsl et fragment.glsl.
Autodidacte du
5
J'ai été surpris aussi, mais n'y a-t-il pas une légère différence de syntaxe entre les shaders de vertex et de fragment, @SandeepDatta? De la même manière que .h et .c peuvent partager beaucoup de choses en commun, mais ils sont utilisés de différentes manières.
Joseph Humfrey
7
@SandeepDatta .hppcontre .cpp? .hvs. .c? Il y a plus de différences de syntaxe et de sémantique entre les shaders de sommets et de fragments qu'il n'y en a entre les en-têtes C / C ++ et les fichiers source.
Miles Rout
1
@MilesRout Pas même de parler de .cc
42
GLSLang, également connu sous le nom de GLSL Reference Parser ou Reference Compiler , est l'un des outils développés par 3Dlabs . Il est répertorié comme un outil SDK sur opengl.org et khronos.org. Le README répertorie les extensions de fichier qu'il attend pour les fichiers de shader: .vert(vertex), .frag(fragment), .tesc(tessellation control), .tese(tessellation evaluation), .geom(geometry), .comp(compute).
TachyonVortex
93

Il n'y a pas d'extension officielle dans la spécification. OpenGL ne gère pas le chargement de shaders à partir de fichiers; vous passez simplement le code du shader sous forme de chaîne, il n'y a donc pas de format de fichier spécifique.

Cependant, glslang , le compilateur / validateur GLSL de référence de Khronos, utilise les extensions suivantes pour déterminer à quel type de shader le fichier est destiné:

  • .vert - un vertex shader
  • .tesc - un shader de contrôle de tessellation
  • .tese - un shader d'évaluation de tessellation
  • .geom - un shader de géométrie
  • .frag - un fragment shader
  • .comp - un shader de calcul
Colonel trente-deux
la source
18

L'identification du type de fichier par extension est une chose spécifique à Windows. Tous les autres systèmes d'exploitation utilisent des approches différentes: MacOS X stocke le type de fichier dans une structure de métadonnées spéciale dans les entrées du système de fichiers. La plupart des * nix identifient les fichiers en testant leur structure interne par rapport à une base de données d '"octets magiques" connus; cependant les éditeurs de texte utilisent l'extension.

Quoi qu'il en soit, les sources GLSL sont comme n'importe quel autre fichier source de programme: du texte brut, et c'est leur type de fichier.

L'extension que vous pouvez choisir comme vous le souhaitez. J'utilise la dénomination suivante:

  • ts.glsl
  • gs.glsl
  • contre glsl
  • fs.glsl

mais c'est mon choix et techniquement mes programmes n'appliquent même aucun schéma de nommage ou d'extension. Le nom est pour les humains de lire et de savoir ce qu'il contient; avoir une extension majeure commune m'oblige à avoir une règle de mise en évidence de la syntaxe pour un seul ensemble d'extensions de fichier.

datenwolf
la source
5
Évalué car OS X utilise principalement l'extension de fichier depuis des années.
Frederik Slijkerman
6
@FrederikSlijkerman: Non, ce n'est pas le cas. MacOS X est un Unix à la base et les extensions de fichier n'y ont jamais été utilisées pour identifier quelque chose. Oui, les types standard obtiennent des extensions de fichier standard, mais ce n'est qu'une question de lisibilité humaine. Peut-être que le Finder peut s'appuyer sur des extensions de fichier comme heuristique pour certains types. Mais s'il peut identifier un fichier uniquement par son en-tête ou par certains octets magiques, il l'utilisera. Comme n'importe quel système basé sur Unix.
datenwolf
3
+1 Je les nomme comme nom d' effet -fs.glsl ou effect-name -vs.glsl.
legends2k
9
Je me rends compte que j'ai deux ans de retard pour l'argument d'OS X, mais je sentais que je devais donner mes deux cents. Tout ce qui se trouve au-dessus de la couche UNIX utilise LaunchServices pour déterminer les associations de fichiers. Chaque fichier a un identifiant de type comme com.stackoverflow.file, qui est stocké sous forme de métadonnées. LaunchServices essaie d'abord de le deviner à partir du type MIME, si l'entrée de métadonnées existe. Sinon, il recherchera l'extension. S'il ne peut pas y correspondre, il recherchera un code de créateur HFS. S'il n'y en a pas, il abandonne. LaunchServices n'essaye jamais d'identifier un fichier par son en-tête ou ses octets magiques.
zneak
2
Cela signifie que le moyen le plus courant de déterminer le type d'un fichier sous OS X est son extension. Ceci est uniquement dans le but d'identifier quelle application doit être utilisée pour ouvrir quel fichier, cependant. Une fois que l'application ouvre le fichier, elle peut décider elle-même de ce qu'elle veut en faire, indépendamment du fait que l'extension soit correcte pour le type de contenu.
zneak
7

Comme d'autres l'ont mentionné, il n'y a pas de réponse correcte au sens strict du terme. Il convient de mentionner que Sublime (confirmé pour v2 et v3) attend également .vert et .frag pour la coloration syntaxique et la validation.

Weavermount
la source
2
Je crois que cela n'est vrai que si vous avez une bibliothèque GLSL installée dans Sublime, par exemple github.com/WebGLTools/GL-Shader-Validator - mon Sublime par défaut ne reconnaît pas les extensions.
Air
La bibliothèque que vous avez liée est de loin la bibliothèque GLSL la plus populaire (et peut-être la seule?) Pour sublime, et j'ai appelé ce que cela attend comme ce que sublime attend. Si vous appelez cela une exagération, je plaiderai coupable. Mais oui, vous avez raison au moins autant que ce sublime car un éditeur de texte consciencieux ouvrira n'importe quel document texte tout en ignorant les extensions qu'il ne connaît pas.
Weavermount
1
A ce jour sublime GLSL ( github.com/euler0/sublime-glsl ) est le plus populaire plugin GLSL et accepte l'ensemble des extensions suivantes: vs, fs, gs, vsh, fsh, gsh, vshader, fshader, gshader, vert, frag, geom, tesc, tese, comp, glsl. Il y a donc une variété à choisir :)
F Lekschas
-1

Il existe deux manières d'écrire des shaders.

Vous pouvez stocker le vertex shader et le contenu du fragment shader dans une char *variable et compiler, lier et attacher le shader à un programme.

Une autre façon est d'écrire le fichier de shader de sommet et de fragment séparé avec l'extension de votre choix et de le lire pour compiler, lier et attacher le shader au programme.

Ainsi, les conventions de dénomination, comme .vert / .frag, .vsdr / .fsdr, etc. sont toutes valides tant que vous savez comment les lire ...

user2439483
la source
-2

Comme cela a déjà été couvert par plusieurs réponses, il n'y a vraiment pas de norme; c'est à vous d'adopter l'approche qui vous est la plus utile.

Je peux voir l'avantage d'utiliser des extensions de shader spécifiques au type, mais ma préférence est d'utiliser l'extension .glsl pour tous les types de shader, car il vous suffit de définir la manière dont le shell utilise le fichier une seule fois.

De même, c'est également une bonne option si vous modifiez vos fichiers de shader dans Notepad ++, car vous pouvez le configurer pour appliquer automatiquement la coloration syntaxique spécifique à la langue à tous vos fichiers de shader en ne spécifiant qu'une seule extension de fichier.

L'inconvénient de cette approche est que vous devez utiliser votre propre convention de dénomination afin de déterminer le type de shader par son nom de fichier mais, pour moi, les avantages l'emportent sur le coût.

Lewis
la source