145 votes

Quelle est l'extension de fichier correcte pour les shaders GLSL ?

Je suis en train d'apprendre l'ombrage glsl et j'ai rencontré différents formats de fichiers. J'ai vu des gens donner à leurs vertex et fragment shaders .vert y .frag extensions. Mais j'ai aussi vu .vsh y .fsh et même les deux shaders ensemble dans une seule et unique .glsl fichier. Je me demande donc s'il existe un format de fichier standard, ou quel est le format "correct" ?

11 votes

Pour autant que je sache, ils n'ont pas d'extensions "correctes", car OpenGL ne les lira pas sur le disque de toute façon.

2 votes

Certaines personnes les appellent .vs et .fs (et .gs) pour rendre explicite ce qu'ils contiennent. Mais comme l'a dit zneak, cela n'a pas vraiment d'importance, il n'y a pas de chose "correcte".

12 votes

GEdit utilise .glslv y .glslf lorsque vous choisissez la coloration syntaxique. C'est le seul endroit que j'ai vu où cela compte.

110voto

Colonel Thirty Two Points 3617

Il n'y a pas d'extension officielle dans la spécification. OpenGL ne gère pas le chargement des 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 le type de shader pour lequel 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

100voto

Nicol Bolas Points 133791

Le compilateur glslang créé par Khronos fait des suppositions sur l'étape du shader en se basant sur l'extension, mais il n'y a pas d'extension standard en dehors de celle-ci (et de nombreux projets ont créé la leur). Le compilateur glslang utilise les clés suivantes .vert , .tesc (TESsellation Control shaders), .tese (shaders d'évaluation TESsellation), .geom , .frag y .comp .

Mais c'est à peu près tout pour toute forme d'extension standard.

24 votes

Je ne pense pas que .vert|.frag soient 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.

5 votes

J'ai été surpris aussi, mais n'y a-t-il pas une légère différence de syntaxe entre les vertex et les fragment shaders, @SandeepDatta ? De la même manière que les fichiers .h et .c peuvent avoir beaucoup de points communs, mais sont utilisés de manière différente.

7 votes

@SandeepDatta .hpp vs. .cpp ? .h vs. .c ? Il y a plus de différences syntaxiques et sémantiques entre les nuanceurs de sommets et de fragments qu'il n'y en a entre les fichiers d'en-tête et de source C/C++.

22voto

datenwolf Points 85093

L'identification du type de fichier par son 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 spéciale de métadonnées dans les entrées du système de fichiers. La plupart des *nixes identifient les fichiers en testant leur structure interne par rapport à une base de données d'"octets magiques" connus ; toutefois, les éditeurs de texte utilisent l'extension.

De toute façon, 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 les appellations suivantes :

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

mais c'est mon choix et, techniquement, mes programmes n'appliquent même pas de schéma de dénomination ou d'extension. Le nommage est destiné aux humains pour qu'ils puissent le lire et savoir ce qu'il contient ; le fait d'avoir une extension majeure commune m'oblige à avoir une règle de mise en évidence syntaxique pour un seul jeu d'extensions de fichiers.

5 votes

Downvoted parce que OS X utilise principalement l'extension de fichier depuis des années.

6 votes

@FrederikSlijkerman : Non, ce n'est pas le cas. MacOS X est un Unix à la base et les extensions de fichiers n'y ont jamais été utilisées pour identifier les choses. Oui, les types standard ont des extensions de fichiers standard, mais c'est seulement une question de lisibilité humaine. Peut-être que le Finder peut s'appuyer sur les extensions de fichiers comme heuristique pour certains types. Mais s'il peut identifier un fichier uniquement par son en-tête ou quelques octets magiques, il l'utilisera. Comme le fait tout système basé sur Unix.

3 votes

+1 Je les nomme comme nom de l'effet -fs.glsl ou nom de l'effet -vs.glsl.

8voto

Weavermount Points 157

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

3 votes

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.

0 votes

La librairie que vous avez liée est de loin la librairie GLSL la plus populaire (et peut-être la seule ?) pour sublime, et j'ai appelé ce qu'elle attend comme ce que sublime attend. Si vous trouvez que c'est une exagération, je plaide coupable. Mais oui, vous avez raison, au moins dans la mesure où sublime, en tant qu'éditeur de texte consciencieux, ouvrira n'importe quel document texte tout en ignorant les extensions qu'il ne connaît pas.

2 votes

A partir d'aujourd'hui, sublime-glsl ( github.com/euler0/sublime-glsl ) est le plugin GLSL le plus populaire et il 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 :)

0voto

user2439483 Points 23

Il existe deux façons d'écrire des shaders.

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

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

Ainsi, les conventions d'appellation, comme .vert/.frag, .vsdr/.fsdr, etc. sont toutes valables tant que vous savez comment les lire...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X