Яке правильне розширення файлу для шейдерів GLSL? [зачинено]


127

Я вивчаю затінення glsl і натрапив на різні формати файлів. Я бачив, як люди дають вершини та фрагменти шейдери .vertта .fragрозширення. Але я також бачив .vshі .fshрозширення, і навіть обидва шейдери разом в одному .glslфайлі. Тож мені цікаво, чи є стандартний формат файлу, або який спосіб є "правильним"?


10
Наскільки я знаю, у них немає "правильних" розширень, оскільки OpenGL не буде читати їх з диска.
zneak

2
Деякі люди називають їх .vs та .fs (і .gs), щоб чітко вказати, що всередині. Але як сказав zneak, це насправді не має значення, немає "правильної" речі.
Деймон

11
GEdit використовує .glslvі .glslfпри виборі підсвічування синтаксису. Це єдине місце, де я бачив, де це має значення.
Piotr Praszmo

Відповіді:


90

Не існує стандартного розширення файлу для шейдерів GLSL. Найбільш поширені з них є , ймовірно , .vertі .frag, так як вони є розширенням, 3D Labs , використовуваним в деяких зі своїх інструментів. Але це стосується будь-якої форми стандартного розширення.


20
Я не думаю, що .vert | .frag - хороші назви розширень для шейдерів. Розширення - це те, що ідентифікує загальний клас файлу. Вони, мабуть, мали назвати їх vertex.glsl та fragment.glsl.
Автододаток

5
Я теж був здивований, але хіба є незначна різниця в синтаксисі між вершинами та фрагментами шейдерів, @SandeepDatta? Таким же чином, що .h і .c можуть мати багато спільного, але вони використовуються по-різному.
Джозеф Хамфрі

7
@SandeepDatta .hppvs. .cpp? .hпроти .c? Між шрифтами вершин та фрагментів між синтаксичними та семантичними відмінностями є більше, ніж між заголовком C / C ++ та вихідними файлами.
Майлз Рут

1
@MilesRout Навіть не говорити про .cc

42
GLSLang, також відомий як GLSL Reference Parser або Reference Compiler , є одним із інструментів, розроблених 3Dlabs . Він вказаний як інструмент SDK як на opengl.org, так і на khronos.org. У README списки розширень файлів , він очікує , що для шейдерних файлів: .vert(вершинні), .frag(фрагмент), .tesc(контроль тесселяции), .tese(оцінка тесселяции), .geom(геометрія), .comp(Compute).
TachyonVortex

93

Офіційного продовження в специфікації немає. OpenGL не обробляє завантаження шейдерів з файлів; ви просто передаєте код шейдера у вигляді рядка, тому конкретного формату файлу немає.

Однак glslang , посилальний компілятор / валідатор GLSL для посилання Khronos, використовує такі розширення для визначення типу шейдера для цього файлу:

  • .vert - вершина шейдер
  • .tesc - шейдер управління тесселяцією
  • .tese - шейдер для оцінки tessellation
  • .geom - шейдер геометрії
  • .frag - фрагмент шейдер
  • .comp - обчислювальний шейдер

18

Ідентифікація типу файлу за допомогою розширення - специфічна для Windows. Усі інші операційні системи використовують різні підходи: MacOS X зберігає тип файлу в спеціальній структурі метаданих у записах файлової системи. Більшість * nixes ідентифікують файли, перевіряючи їх внутрішню структуру на базу даних відомих «магічних байтів»; проте текстові редактори використовують розширення.

У будь-якому випадку джерела GLSL - це як і будь-який інший вихідний файл програми: звичайний текст, і це їх тип файлу.

Ви можете вибрати розширення за своїм бажанням. Я використовую таку назву:

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

але це мій вибір, і технічно мої програми навіть не застосовують жодної схеми іменування чи розширення. Назив для того, щоб люди читали і знали, що в ньому; маючи загальне основне розширення, вимагає від мене правила виділення синтаксису лише для одного набору розширень файлів.


5
Незважаючи на те, що ОС X в основному використовує розширення файлу протягом багатьох років.
Фредерік Шлейкерман

6
@FrederikSlijkerman: Ні, це не так. MacOS X є Unix по своїй суті, і розширення файлів там ніколи не використовувалися для ідентифікації речі. Так, стандартні типи отримують стандартні розширення файлів, але це лише річ для людської читабельності. Можливо, Finder може покладатися на розширення файлів як евристику для деяких типів. Але якщо він може ідентифікувати файл виключно за його заголовком або якимись магічними байтами, він використовуватиме це. Як і будь-яка система на базі Unix.
datenwolf

3
+1 Я називаю їх як ім'я ефекту -fs.glsl або ім'я ефекту -vs.glsl.
legends2k

9
Я розумію, що я запізнююся на два роки за аргументом OS X, але відчував, що мені варто кинути свої два центи. Все, що знаходиться вище шару UNIX, використовує LaunchServices для визначення асоціацій файлів. Кожен файл має тип ідентифікатора типу com.stackoverflow.file, який зберігається як метадані. LaunchServices намагається спочатку відгадати його за типом MIME, якщо запис метаданих існує. Якщо ні, то буде шукати розширення. Якщо він не може відповідати, він буде шукати код HFS. Якщо такого немає, він здається. LaunchServices ніколи не намагається ідентифікувати файл за його заголовком або магічними байтами.
zneak

2
Це означає, що найпоширенішим способом визначення типу файлу в OS X є його розширення. Це лише для того, щоб визначити, яку програму слід використовувати для відкриття файлу. Після того, як програма відкриє файл, він може вирішити для себе, що він хоче з ним робити, незалежно від того, чи правильне розширення для типу вмісту.
zneak

7

Як уже згадували інші, відповідь не є найсуворішою. Воно зазначає, що Sublime (підтверджено для v2 та v3) також очікує .vert та .frag для виділення та валідації синтаксису.


2
Я вважаю, що це справедливо лише в тому випадку, якщо у вас встановлена ​​бібліотека GLSL в Sublime, наприклад, github.com/WebGLTools/GL-Shader-Validator - мій Sublime за замовчуванням не розпізнає розширення.
Повітря

Ліб, з яким ви пов’язані, на сьогоднішній день є найпопулярнішим (і, можливо, лише?) GLSL lib для піднесеного, і я назвав те, що очікує, як те, що піднесене. Якщо ви назвете це завищенням, я визнаю свою вину. Але так, ви маєте рацію щонайменше стільки ж, скільки піднесений текстовий редактор відкриє будь-який текстовий документ, ігноруючи розширення, про які він не знає.
Твердість

1
На сьогоднішній день піднесеного-GLSL ( github.com/euler0/sublime-glsl ) є найбільш популярним GLSL плагіна і приймає наступний набір розширень: vs, fs, gs, vsh, fsh, gsh, vshader, fshader, gshader, vert, frag, geom, tesc, tese, comp, glsl. Тож є вибір на вибір :)
F Lekschas

-1

Існує два способи написання шейдерів.

Ви можете зберігати вершинний шейдер та вміст шейдера фрагмента у char *змінній та компілювати, посилати та приєднувати шейдер до програми.

Інший спосіб - написати окремий файл вершин і фрагментів шейдера з будь-яким розширенням, яке вам подобається, і прочитати його для складання, посилання та приєднання шейдера до програми.

Тож умовні умови іменування, такі як .vert / .frag, .vsdr / .fsdr тощо, всі дійсні, доки ви вмієте його читати ...


-2

Як вже було охоплено декількома відповідями, насправді не існує стандарту; від вас залежить прийняття найбільш підходящого вам підходу.

Я бачу вигоду у використанні розширень шейдерів, характерних для типу, але я вважаю за краще використовувати розширення .glsl для всіх типів шейдерів, оскільки вам потрібно визначити, як оболонка використовує файл.

Аналогічно, це також хороший варіант, якщо ви редагуєте свої файли шейдерів у Notepad ++, оскільки ви можете налаштувати його автоматично застосовувати виділення синтаксису, характерного для мови, до всіх ваших файлів шейдерів, вказавши лише одне розширення файлу.

Мінусом цього підходу є те, що вам потрібно використовувати власну конвенцію про іменування, щоб визначити тип шейдера за його ім'ям файлу, але, на мене, переваги переважають за витратами.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.