Estoy aprendiendo el sombreado de glsl y me he encontrado con diferentes formatos de archivo. He visto personas que dan sus sombreadores .vert
y .frag
extensiones de vértices y fragmentos . Pero también he visto .vsh
y .fsh
extensiones, e incluso ambos shaders juntos en un solo .glsl
archivo. Entonces, me pregunto si hay un formato de archivo estándar, o ¿cuál es el formato 'correcto'?
127
.glslv
y.glslf
al elegir resaltado de sintaxis. Ese es el único lugar que he visto donde importa.Respuestas:
No existe una extensión de archivo estándar para sombreadores GLSL. Los más comunes son probablemente
.vert
y.frag
, como estas son las extensiones que 3D Labs utilizó en algunas de sus herramientas. Pero eso es todo para cualquier forma de extensión estándar.fuente
.hpp
vs.cpp
?.h
vs.c
? Hay más sintaxis y diferencias semánticas entre los sombreadores de vértices y fragmentos que entre el encabezado C / C ++ y los archivos fuente..vert
(vértice),.frag
(fragmento),.tesc
(control de teselación),.tese
(evaluación de teselación),.geom
(geometría),.comp
(cálculo).No hay extensión oficial en la especificación. OpenGL no maneja los sombreadores de carga de los archivos; simplemente pasa el código del sombreador como una cadena, por lo que no hay un formato de archivo específico.
Sin embargo, glslang , el compilador / validador GLSL de referencia de Khronos, utiliza las siguientes extensiones para determinar para qué tipo de sombreador es el archivo:
fuente
Identificar el tipo de archivo por extensión es algo específico de Windows. Todos los demás sistemas operativos utilizan enfoques diferentes: MacOS X almacena el tipo de archivo en una estructura de metadatos especial en las entradas del sistema de archivos. La mayoría de los * nixes identifican archivos al probar su estructura interna contra una base de datos de "bytes mágicos" conocidos; sin embargo, los editores de texto usan la extensión.
De todos modos, las fuentes GLSL son como cualquier otro archivo fuente del programa: texto plano, y ese es su tipo de archivo.
La extensión que puede elegir como desee. Yo uso los siguientes nombres:
pero esa es mi elección y técnicamente mis programas ni siquiera aplican ningún esquema de nombres o extensiones. El nombre es para que los humanos lean y sepan lo que contiene; tener una extensión principal común requiere que tenga una regla de resaltado de sintaxis para un solo conjunto de extensiones de archivo.
fuente
com.stackoverflow.file
, que se almacena como metadatos. LaunchServices intenta adivinarlo desde el tipo MIME primero, si existe la entrada de metadatos. Si no, buscará la extensión. Si no puede coincidir, buscará un código de creador HFS. Si no hay ninguno, se rinde. LaunchServices nunca intenta identificar un archivo por su encabezado o bytes mágicos.Como otros han mencionado, no hay una respuesta correcta en el sentido más estricto. Vale la pena mencionar que Sublime (confirmado para v2 y v3) también espera .vert y .frag para resaltar y validar la sintaxis.
fuente
vs, fs, gs, vsh, fsh, gsh, vshader, fshader, gshader, vert, frag, geom, tesc, tese, comp, glsl
. Así que hay una variedad para elegir :)Hay dos formas de escribir sombreadores.
Puede almacenar el sombreador de vértices y el contenido del sombreador de fragmentos en una
char *
variable y compilar, vincular y adjuntar el sombreador a un programa.Otra forma es escribir el archivo separado de vértices y fragmentos de sombreador con cualquier extensión que desee y leerlo para compilar, vincular y adjuntar el sombreador al programa.
Por lo tanto, la convención de nomenclatura, como .vert / .frag, .vsdr / .fsdr, etc., son válidas siempre que sepa cómo leerla ...
fuente
Como ya ha sido cubierto por múltiples respuestas, realmente no hay un estándar; depende de usted adoptar el enfoque que sea más útil para usted.
Puedo ver el beneficio de usar extensiones de sombreador específicas de tipo, pero mi preferencia es usar la extensión .glsl para todos los tipos de sombreador, ya que solo necesita definir cómo Shell utiliza el archivo una vez.
Del mismo modo, esta también es una buena opción si edita sus archivos de sombreador en Notepad ++, ya que puede configurarlo para aplicar automáticamente el resaltado de sintaxis específico del idioma a todos sus archivos de sombreador especificando solo una extensión de archivo.
La desventaja de este enfoque es que debe utilizar su propia convención de nomenclatura para determinar el tipo de sombreador por su nombre de archivo, pero, para mí, los beneficios superan el costo.
fuente