Estou aprendendo o glsl shading e me deparei com diferentes formatos de arquivo. Vi pessoas dando seus shaders .vert
e .frag
extensões de vértice e fragmento . Mas também tenho visto .vsh
e .fsh
extensões, e até mesmo ambos os shaders juntos em um único .glsl
arquivo. Então, eu estou querendo saber se existe um formato de arquivo padrão, ou qual o caminho 'correto'?
127
.glslv
e.glslf
ao escolher o realce da sintaxe. Esse é o único lugar que eu vi onde importa.Respostas:
Não há extensão de arquivo padrão para shaders GLSL. Os mais comuns são provavelmente
.vert
e.frag
, como essas são as extensões que o 3D Labs usou em algumas de suas ferramentas. Mas é isso para qualquer forma de extensão padrão.fonte
.hpp
vs..cpp
?.h
vs..c
? Existem mais diferenças de sintaxe e semântica entre os sombreadores de vértices e fragmentos do que entre os arquivos de cabeçalho e de origem do C / C ++..vert
(vértice),.frag
(fragmento),.tesc
(controle de mosaico),.tese
(avaliação de mosaico),.geom
(geometria) e.comp
(computação).Não há extensão oficial nas especificações. O OpenGL não suporta carregar shaders de arquivos; basta passar o código do sombreador como uma string, para que não haja um formato de arquivo específico.
No entanto, glslang , o compilador / validador de referência GLSL da Khronos, usa as seguintes extensões para determinar que tipo de sombreador serve para o arquivo:
fonte
Identificar o tipo de arquivo por extensão é algo específico do Windows. Todos os outros sistemas operacionais usam abordagens diferentes: o MacOS X armazena o tipo de arquivo em uma estrutura de metadados especial nas entradas do sistema de arquivos. A maioria dos * nixes identifica arquivos testando sua estrutura interna em um banco de dados de "bytes mágicos" conhecidos; no entanto, os editores de texto usam a extensão.
De qualquer forma, as fontes GLSL são como qualquer outro arquivo de origem do programa: texto simples, e esse é o tipo de arquivo.
A extensão que você pode escolher como desejar. Eu uso a seguinte nomeação:
mas essa é minha escolha e tecnicamente meus programas nem impõem nenhum esquema de nomenclatura ou extensão. O nome é para os humanos lerem e saberem o que há nele; ter uma extensão principal comum exige que eu tenha uma regra de destaque de sintaxe para apenas um conjunto de extensões de arquivo.
fonte
com.stackoverflow.file
, que é armazenado como metadados. O LaunchServices tenta adivinhar do tipo MIME primeiro, se a entrada de metadados existir. Caso contrário, ele procurará a extensão. Se não conseguir, ele procurará um código de criador de HFS. Se não houver, desiste. O LaunchServices nunca tenta identificar um arquivo pelo cabeçalho ou bytes mágicos.Como outros já mencionaram, não existe uma resposta correta no sentido mais estrito. É importante mencionar que o Sublime (confirmado para v2 e v3) também espera .vert e .frag para destaque e validação de sintaxe.
fonte
vs, fs, gs, vsh, fsh, gsh, vshader, fshader, gshader, vert, frag, geom, tesc, tese, comp, glsl
. Portanto, há uma variedade para escolher :)Existem duas maneiras de escrever shaders.
Você pode armazenar o conteúdo do shader de vértice e do fragmento de shader em uma
char *
variável e compilar, vincular e anexar o shader a um programa.Outra maneira é escrever o arquivo separado do vértice e do shader de fragmento com qualquer extensão que você desejar e lê-lo para compilar, vincular e anexar o shader ao programa.
Portanto, a convenção de nomenclatura, como .vert / .frag, .vsdr / .fsdr, etc., é válida desde que você saiba como lê-la ...
fonte
Como já foi coberto por várias respostas, realmente não existe um padrão; depende de você adotar a abordagem mais útil para você.
Posso ver o benefício no uso de extensões de shader específicas do tipo, mas minha preferência é usar a extensão .glsl para todos os tipos de shader, pois você só precisa definir como o shell usa o arquivo uma vez.
Da mesma forma, essa também é uma boa opção se você editar seus arquivos de sombreador no Notepad ++, pois poderá configurá-lo para aplicar automaticamente a sintaxe específica do idioma realçada a todos os seus arquivos de sombreador, especificando apenas uma extensão de arquivo.
A desvantagem dessa abordagem é que você precisa utilizar sua própria convenção de nomenclatura para determinar o tipo de sombreador pelo nome do arquivo, mas, para mim, os benefícios superam o custo.
fonte