Czym jest odpowiednie rozszerzenie pliku dla GLSL shaders?

Uczę się cieniowania glsl i natknąłem się na różne formaty plików. Widziałem ludzi, którzy dają swoje rozszerzenia shaderów wierzchołków i fragmentów .vert i .frag. Ale widziałem również rozszerzenia .vsh i .fsh, a nawet oba shadery razem w jednym pliku .glsl. Zastanawiam się, czy istnieje standardowy format pliku, czy w jaki sposób jest 'poprawny'?

Author: Xz_awan, 2011-06-22

5 answers

Nie ma standardowego rozszerzenia pliku dla shaderów GLSL. Najczęstsze z nich to prawdopodobnie .vert i .frag, ponieważ są to rozszerzenia, których 3D Labs używało w niektórych swoich narzędziach. Ale to wszystko dla każdej formy standardowego rozszerzenia.

 78
Author: Nicol Bolas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-21 23:32:51

Nie ma oficjalnego rozszerzenia w spec. OpenGL nie obsługuje ładowania shaderów z plików; po prostu przekazujesz kod shadera jako ciąg znaków, więc nie ma określonego formatu pliku.

Jednak glslang , kompilator/walidator referencyjny Khronos GLSL, używa następujących rozszerzeń, aby określić, do jakiego typu shadera służy plik:

  • .Vert-a vertex shader
  • .tesc-a teselation control shader
  • .tese-ocena teselacji shader
  • .geom-a geometry shader
  • .frag-a fragment shader
  • .comp-a compute shader
 67
Author: Colonel Thirty Two,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-23 15:18:37

Identyfikacja typu pliku według rozszerzenia jest rzeczą specyficzną dla systemu Windows. Wszystkie inne systemy operacyjne używają różnych metod: MacOS X przechowuje Typ pliku w specjalnej strukturze metadanych we wpisach systemu plików. Większość * nixów identyfikuje pliki testując ich wewnętrzną strukturę na podstawie bazy danych znanych "magicznych bajtów"; jednak edytory tekstu używają tego rozszerzenia.

W każdym razie, źródła GLSL są jak każdy inny plik źródłowy programu: zwykły tekst, i to jest ich typ pliku.

The rozszerzenie można wybrać, jak chcesz. Używam następującego nazewnictwa:

  • ts.glsl
  • gs.glsl
  • vs. glsl
  • fs.glsl

Ale to mój wybór i technicznie moje programy nawet nie wymuszają żadnego nazewnictwa ani schematu rozszerzenia. Nazewnictwo jest dla ludzi, aby czytać i wiedzieć, co w nim jest; posiadanie wspólnego głównego rozszerzenia wymaga ode mnie reguły podkreślania składni tylko dla jednego zestawu rozszerzeń plików.

 15
Author: datenwolf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-22 06:59:20

Jak już inni wspominali, nie ma poprawnej odpowiedzi w ścisłym tego słowa znaczeniu. Warto wspomnieć, że sublime (potwierdzone dla v2 i v3) również oczekuje .vert i .frag do podświetlania i walidacji składni.

 8
Author: Weavermount,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-12 00:00:03

Istnieją dwa sposoby pisania shaderów.

Możesz przechowywać zawartość shadera wierzchołków i fragmentu w zmiennej char * i kompilować, łączyć i dołączać shader do programu.

Innym sposobem jest zapisanie oddzielnego pliku vertex i fragment shader z dowolnym rozszerzeniem i odczytanie go, aby skompilować, połączyć i dołączyć shader do programu.

Więc konwencja nazewnictwa, jak .vert/frag,vsdr/fsdr itp. są ważne tak długo, jak wiesz, jak czytać to...

 -2
Author: user2439483,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-22 15:42:41