OpenGL / GLSL - использование glShaderSource с несколькими источниками для поддержки включаемых файлов

Поскольку GLSL не имеет опции включаемого файла, я пытаюсь добавить это, используя "#pragma include "parser. (Я хочу это, потому что у меня есть несколько общих методов, которые я хотел бы реализовать только один раз, но мог бы использовать во многих разных шейдерах, например, в Smootherstep Кена Перлина)

Анализ файлов шейдеров для получения включенных файлов работает нормально. Но при установке ShaderSource с несколькими исходными файлами я всегда сталкиваюсь с проблемами; поскольку мой основной шейдер обычно начинается с "#version 330", а строка # version-line всегда должна быть первой строкой в ​​шейдере, я могу добавить свой основной файл только как первый в массив строк, переданных в glShadersource, а после что все включенные файлы. Но тогда мой основной файл не может использовать какие-либо функции, реализованные в этих включенных файлах, поскольку они по существу будут объединены после моего основного файла, поэтому компилятор жалуется, что он не знает функций, которые мой основной файл using.

Единственный способ заставить его работать, это прочитать основной файл, проанализировать директиву include, а затем заменить эту строку директивы на содержимое файла, чтобы быть включены (рекурсивно применяя этот же метод ко всем включенным файлам, которые могут включать в себя сами другие файлы), но это означало бы, что номера строк в ошибках компиляции больше не будут соответствовать реальным номерам основного файла.

Кто-нибудь установил некоторые своего рода "включить" функциональность для GLSL, которая работает И сохраняет номера белья? И если да, то как?

5
задан Pygmy 2 August 2011 в 12:58
поделиться