J'apprends l'ombrage glsl et j'ai rencontré différents formats de fichiers. J'ai vu des gens donner leurs shaders .vert
et .frag
extensions de sommets et de fragments . Mais je l' ai aussi vu .vsh
et .fsh
extensions, et même les deux shaders ensemble dans un seul .glsl
fichier. Je me demande donc s'il existe un format de fichier standard, ou de quelle manière est le «bon»?
127
.glslv
et.glslf
lors du choix de la coloration syntaxique. C'est le seul endroit que j'ai vu où cela compte.Réponses:
Il n'y a pas d'extension de fichier standard pour les shaders GLSL. Les plus courants sont probablement
.vert
et.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.la source
.hpp
contre.cpp
?.h
vs..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..vert
(vertex),.frag
(fragment),.tesc
(tessellation control),.tese
(tessellation evaluation),.geom
(geometry),.comp
(compute).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é:
la source
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:
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.
la source
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.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.
la source
vs, fs, gs, vsh, fsh, gsh, vshader, fshader, gshader, vert, frag, geom, tesc, tese, comp, glsl
. Il y a donc une variété à choisir :)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 ...
la source
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.
la source