J'apprends l'ombrage de glsl et je suis tombé sur différents formats de fichiers. J'ai vu des gens donner leurs shaders de vertex et de fragments .vert
et .frag
extensions. Mais j'ai aussi vu .vsh
et .fsh
_ extensions et même les deux shaders ensemble en un seul .glsl
fichier. Je me demande donc s'il existe un format de fichier standard ou quel est le format "correct"?
Il n'y a pas d'extension de fichier standard pour les shaders GLSL. Les plus communs sont probablement .vert
et .frag
, car ce sont les extensions que 3D Labs a utilisées dans certains de leurs outils. Mais c'est à peu près tout pour toute forme d'extension standard.
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 ne faites que transmettre le code de 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 auquel le fichier est destiné:
- .vert - un vertex shader
- .tesc - un shader de contrôle de tessellation
- .tese - un shader d'évaluation de pavage
- .geom - un shader de géométrie
- .frag - un fragment shader
- .comp - un calcul shader
Identifier le 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 * nixes 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 les noms suivants:
mais c'est mon choix et techniquement, mes programmes n'appliquent même pas de schéma de nommage ou d'extension. Le nom est pour que les humains lisent et sachent ce qu’il contient; avoir une extension majeure commune nécessite que je dispose d'une règle de mise en évidence de la syntaxe pour un seul ensemble d'extensions de fichier.
Comme d'autres l'ont mentionné, il n'y a pas de réponse correcte au sens le plus strict. Il convient de mentionner que Sublime (confirmé pour les versions 2 et 3) attend également .vert et .frag pour la coloration syntaxique et la validation.
Il y a deux façons d'écrire des shaders.
Vous pouvez stocker le contenu du vertex shader et du fragment shader dans un fichier char *
variable et compiler, lier et attacher le shader à un programme.
Une autre méthode consiste à écrire le fichier de shader de vertex et de fragment séparé avec l’extension de votre choix et à le lire pour compiler, lier et associer le shader au programme.
Ainsi, les conventions de nommage, telles que .vert/.frag, .vsdr/.fsdr, etc. sont toutes valables tant que vous savez comment les lire ...