Я изучаю затенение glsl и сталкивался с разными форматами файлов. Я видел, как люди использовали свои вершинные и фрагментные шейдеры .vert
и .frag
расширения. Но я также видел .vsh
и .fsh
расширения, и даже оба шейдера вместе в одном .glsl
файле. Поэтому мне интересно, есть ли стандартный формат файла или какой из них «правильный»?
127
.glslv
и.glslf
при выборе подсветки синтаксиса. Это единственное место, где это важно.Ответы:
Стандартного расширения файлов для шейдеров GLSL не существует. Наиболее распространенными из них, вероятно, являются
.vert
и.frag
, поскольку это расширения, которые 3D Labs использовали в некоторых своих инструментах. Но это все для любой формы стандартного расширения.источник
.hpp
vs..cpp
?.h
против.c
? Между вершинными и фрагментными шейдерами больше синтаксических и семантических различий, чем между заголовочными и исходными файлами C / C ++..vert
(вершинные),.frag
(фрагмент),.tesc
(контроль тесселяции),.tese
(оценка тесселяции),.geom
(геометрия),.comp
(Compute).В спецификации нет официального расширения. OpenGL не поддерживает загрузку шейдеров из файлов; вы просто передаете код шейдера в виде строки, поэтому нет определенного формата файла.
Однако glslang , эталонный компилятор / валидатор GLSL от Khronos, использует следующие расширения, чтобы определить, для какого типа шейдера предназначен файл:
источник
Определение типа файла по расширению - это особенность Windows. Все остальные операционные системы используют разные подходы: MacOS X хранит тип файла в специальной структуре метаданных в записях файловой системы. Большинство * nix'ов идентифицируют файлы, проверяя их внутреннюю структуру по базе данных известных «магических байтов»; однако текстовые редакторы используют расширение.
В любом случае, исходники GLSL такие же, как и любой другой исходный файл программы: обычный текст, и это их тип файла.
Расширение вы можете выбрать по своему усмотрению. Я использую следующие названия:
но это мой выбор, и технически мои программы даже не применяют никаких схем именования или расширения. Именование предназначено для того, чтобы люди читали и знали, что в нем; наличие общего основного расширения требует от меня наличия правила выделения синтаксиса только для одного набора расширений файла.
источник
com.stackoverflow.file
, например , который хранится в виде метаданных. LaunchServices сначала пытается угадать его по типу MIME, если запись метаданных существует. Если нет, он будет искать расширение. Если он не может соответствовать ему, он будет искать код создателя HFS. Если его нет, он сдается. LaunchServices никогда не пытается идентифицировать файл по его заголовку или магическим байтам.Как отмечали другие, нет правильного ответа в самом строгом смысле слова. Следует упомянуть, что Sublime (подтвержденный для v2 и v3) также ожидает .vert и .frag для выделения и проверки синтаксиса.
источник
vs, fs, gs, vsh, fsh, gsh, vshader, fshader, gshader, vert, frag, geom, tesc, tese, comp, glsl
. Так что есть из чего выбирать :)Есть два способа написания шейдеров.
Вы можете сохранить содержимое вершинного шейдера и фрагментного шейдера в
char *
переменной, а также скомпилировать, связать и присоединить шейдер к программе.Другой способ - написать отдельный файл вершинного и фрагментного шейдера с любым расширением, которое вам нравится, и прочитать его, чтобы скомпилировать, связать и присоединить шейдер к программе.
Таким образом, соглашения об именах, такие как .vert / .frag, .vsdr / .fsdr и т. Д., Действительны, если вы знаете, как их читать ...
источник
Как уже было сказано в нескольких ответах, на самом деле нет стандарта; Вам решать, какой подход будет вам наиболее полезен.
Я вижу преимущества использования расширений шейдеров для конкретных типов, но я предпочитаю использовать расширение .glsl для всех типов шейдеров, поскольку вам нужно только один раз определить, как оболочка использует файл.
Точно так же это также хороший вариант, если вы редактируете свои файлы шейдеров в Notepad ++, поскольку вы можете настроить его для автоматического применения подсветки синтаксиса для каждого языка ко всем вашим файлам шейдеров, указав только одно расширение файла.
Обратной стороной этого подхода является то, что вам нужно использовать собственное соглашение об именах, чтобы определять тип шейдера по имени файла, но для меня преимущества перевешивают затраты.
источник