Uczę się cieniowania GLSL i natknąłem się na różne formaty plików. Widziałem ludzi, którzy nadawali swoje shadery .vert
i .frag
rozszerzenia wierzchołków i fragmentów . Ale widziałem też .vsh
i .fsh
rozszerzenia, a nawet oba shadery razem w jednym .glsl
pliku. Zastanawiam się więc, czy istnieje standardowy format pliku, czy też w jaki sposób jest „prawidłowy”?
129
.glslv
i.glslf
przy wyborze podświetlania składni. To jedyne miejsce, które widziałem, gdzie ma to znaczenie.Odpowiedzi:
Nie ma standardowego rozszerzenia pliku dla shaderów GLSL. Najczęstsze to prawdopodobnie
.vert
i.frag
, ponieważ są to rozszerzenia, które 3D Labs użyło w niektórych swoich narzędziach. Ale to wszystko w przypadku dowolnej formy standardowego rozszerzenia.źródło
.hpp
vs..cpp
?.h
vs..c
? Istnieje więcej różnic składniowych i semantycznych między Vertex Shaderami i Fragment Shaderami niż między plikami nagłówkowymi C / C ++ a plikami źródłowymi..vert
(Vertex),.frag
(fragment),.tesc
(kontrola teselacji).tese
(ocena teselacji),.geom
(geometria),.comp
(obliczeniowe).W specyfikacji nie ma oficjalnego rozszerzenia. OpenGL nie obsługuje ładowania shaderów z plików; po prostu przekazujesz kod modułu cieniującego jako ciąg, więc nie ma określonego formatu pliku.
Jednak glslang , referencyjny kompilator / walidator GLSL firmy Khronos, używa następujących rozszerzeń do określenia typu modułu cieniującego, dla którego jest przeznaczony plik:
źródło
Identyfikowanie typu pliku według rozszerzenia jest czynnością charakterystyczną dla systemu Windows. Wszystkie inne systemy operacyjne stosują różne podejścia: MacOS X przechowuje typ pliku w specjalnej strukturze metadanych we wpisach systemu plików. Większość * nixów identyfikuje pliki, testując ich strukturę wewnętrzną w bazie danych znanych „magicznych bajtów”; jednak edytory tekstu używają rozszerzenia.
W każdym razie źródła GLSL są takie same, jak każdy inny plik źródłowy programu: zwykły tekst i taki jest ich typ pliku.
Rozszerzenie, które możesz wybrać, jak chcesz. Używam następującego nazewnictwa:
ale to mój wybór i technicznie rzecz biorąc, moje programy nawet nie wymuszają żadnego schematu nazewnictwa ani rozszerzeń. Nazewnictwo jest dla ludzi, aby mogli czytać i wiedzieć, co w nim jest; posiadanie wspólnego głównego rozszerzenia wymaga ode mnie stosowania reguły podświetlania składni tylko dla jednego zestawu rozszerzeń plików.
źródło
com.stackoverflow.file
, taki jak , który jest przechowywany jako metadane. LaunchServices najpierw próbuje odgadnąć go na podstawie typu MIME, jeśli istnieje wpis metadanych. Jeśli nie, będzie szukał rozszerzenia. Jeśli nie może go dopasować, będzie szukał kodu twórcy HFS. Jeśli nie ma, poddaje się. LaunchServices nigdy nie próbuje zidentyfikować pliku na podstawie jego nagłówka lub magicznych bajtów.Jak wspominali inni, nie ma właściwej odpowiedzi w ścisłym tego słowa znaczeniu. Należy wspomnieć, że Sublime (potwierdzone dla wersji 2 i 3) oczekuje również .vert i .frag do podświetlania składni i walidacji.
źródło
vs, fs, gs, vsh, fsh, gsh, vshader, fshader, gshader, vert, frag, geom, tesc, tese, comp, glsl
. Jest więc wiele do wyboru :)Istnieją dwa sposoby pisania shaderów.
Możesz przechowywać Vertex Shader i Fragment Shader w
char *
zmiennej i kompilować, łączyć i dołączać moduł cieniujący do programu.Innym sposobem jest zapisanie oddzielnego pliku Vertex Shader i Fragment Shadera z dowolnym rozszerzeniem i odczytanie go w celu skompilowania, połączenia i dołączenia modułu cieniującego do programu.
Zatem konwencja nazewnictwa, taka jak .vert / .frag, .vsdr / .fsdr itp., Są ważne, o ile wiesz, jak je czytać ...
źródło
Jak już zostało omówione w wielu odpowiedziach, tak naprawdę nie ma standardu; to od Ciebie zależy, czy zastosujesz podejście, które jest dla Ciebie najbardziej pomocne.
Widzę korzyści płynące z używania rozszerzeń shaderów specyficznych dla typu, ale wolę używać rozszerzenia .glsl dla wszystkich typów shaderów, ponieważ wystarczy zdefiniować, w jaki sposób powłoka używa pliku tylko raz.
Podobnie jest to również dobra opcja, jeśli edytujesz pliki shaderów w Notepad ++, ponieważ możesz skonfigurować je tak, aby automatycznie stosować podświetlanie składni specyficzne dla języka do wszystkich plików shaderów, określając tylko jedno rozszerzenie pliku.
Wadą tego podejścia jest to, że musisz użyć własnej konwencji nazewnictwa, aby określić typ modułu cieniującego na podstawie jego nazwy pliku, ale dla mnie korzyści przewyższają koszty.
źródło