Я изучаю glsl shading, и я сталкивался с различными форматами файлов. Я видел, как люди открывали свои вершинные и фрагментарные шейдеры .vert
и .frag
. Но я также видел расширения .vsh
и .fsh
и даже оба шейдера вместе в одном файле .glsl
. Поэтому мне интересно, есть ли стандартный формат файла, или какой путь является "правильным"?
Какое правильное расширение файла для шейдеров GLSL?
Ответ 1
Нет стандартного расширения файла для шейдеров GLSL. Наиболее распространенными являются, вероятно, .vert
и .frag
, так как это расширения, которые 3D Labs использовали в некоторых своих инструментах. Но об этом для любой формы стандартного расширения.
Ответ 2
В спецификации нет официального расширения. OpenGL не обрабатывает загрузку шейдеров из файлов; вы просто передаете шейдерный код в виде строки, поэтому нет определенного формата файла.
Однако glslang, справочный компилятор/валидатор HLS для справки Хроноса, использует следующие расширения для определения типа шейдера, для которого предназначен этот файл:
- .vert - вершинный шейдер
- .tesc - шейдер управления тесселяции
- .tese - шейдерный анализ шейдеров
- .geom - геометрический шейдер
- .frag - шейдер фрагмента
- .comp - вычислительный шейдер
Ответ 3
Идентификация типа файла по расширению - это особенность Windows. Все другие операционные системы используют разные подходы: MacOS X хранит тип файла в специальной структуре метаданных в записях файловой системы. Большинство * nixes идентифицируют файлы, проверяя их внутреннюю структуру на базе базы данных известных "магических байтов"; однако текстовые редакторы используют расширение.
В любом случае, источники GLSL похожи на любой другой исходный файл программы: обычный текст и тип файла.
Расширение, которое вы можете выбрать по своему усмотрению. Я использую следующее имя:
- ts.glsl
- gs.glsl
- vs .glsl
- fs.glsl
но мой выбор и технически мои программы даже не предусматривают никакой схемы именования или расширения. Именование для людей, чтобы читать и знать, что в нем; с общим общим расширением требует, чтобы у меня было правило синтаксиса для высоких значений только для одного набора расширений файла.
Ответ 4
Как отмечали другие, в строгом смысле слова нет правильного ответа. Следует отметить, что Sublime (подтвержденный для v2 и v3) также ожидает .vert и .frag для подсветки синтаксиса и проверки.
Ответ 5
Существует два способа написания шейдеров.
Вы можете сохранить содержимое шейдера вершин и фрагментарного шейдера в переменной char *
и скомпилировать, связать и прикрепить шейдер к программе.
Другой способ - написать отдельный файл вершинного и фрагментарного шейдера с любым расширением, которое вам нравится, и прочитать его для компиляции, ссылки и прикрепления шейдера к программе.
Таким образом, соглашение об именах, такое как .vert/.frag,.vsdr/.fsdr и т.д., является действительным до тех пор, пока вы знаете, как его читать...
Ответ 6
Как уже было сказано в нескольких ответах, стандарта на самом деле нет; Вам нужно принять наиболее полезный для вас подход.
Я вижу преимущество в использовании специфичных для типа расширений шейдеров, но я предпочитаю использовать расширение .glsl для всех типов шейдеров, поскольку вам нужно только определить, как оболочка использует файл один раз.
Аналогичным образом, это также хороший вариант, если вы редактируете свои файлы шейдеров в Notepad++, поскольку вы можете настроить его так, чтобы он автоматически применял подсветку синтаксиса для каждого языка ко всем вашим файлам шейдеров, указав только одно расширение файла.
Недостатком этого подхода является то, что вам нужно использовать собственное соглашение об именах, чтобы определить тип шейдера по имени файла, но для меня преимущества перевешивают стоимость.