«Минификация» - это нечто иное, чем оптимизация. Обычно этот термин используется для описания процесса, который принимает исходный файл в текстовом виде и удаляет все лишние пробелы и заменяет все идентификаторы на более короткие.
Строго говоря, вся идея минимизации является глупостью, поскольку она имеет нулевое влияние на производительность; это не влияет ни на кодирование кода, ни на результат компиляции. Вся глупость минификации началась в веб-разработке, чтобы уменьшить размер ресурса веб-страницы; совершенно бесполезно, потому что вы получите гораздо лучшую производительность, если просто сжать текст с помощью gzip или аналогичного. Черт возьми, после архивирования размер оригинальной и уменьшенной версий, вероятно, будет в пределах нескольких байт друг от друга.
Если вы действительно беспокоитесь о размере своего шейдера как ресурса, просто сожмите его (но учтите, что накладные расходы на код распаковки). РЕДАКТИРОВАТЬ: Однако, если ваша цель - WebGL, тогда используйте сжатие gzip транспорта HTTP. Соответствующие браузеры поддерживают все это, и большинство HTTP-серверов можно настроить для прозрачной доставки дополнительного .gz
файла с суффиксом (или для сжатия и кэширования его на лету).
Для оптимизации Вы должны посмотреть на другие предложения Хронос. В частности, компилятор GLSL-SPIR-V glslc
, оптимизатор SPIR-V spirv-opt
и декомпилятор SPIR-V spirv-cross
. Вы можете объединить их в цепочку, чтобы создать оптимизированный «сокращенный» GLSL.
glslc --target-env=opengl -fshader-stage=... -o ${FILE}.spv ${FILE}
spirv-opt -Os -o ${FILE}.spv.opt ${FILE}.spv
spirv-cross --output ${FILE}.opt ${FILE}.spv.opt
Поскольку инструменты SPIR-V являются частью официального SDK Vulkan, а SPIR-V также является допустимым форматом шейдеров, который необходимо загрузить. непосредственно с помощью OpenGL-4.6 (а не только из источника GLSL), вы можете спокойно спать на том факте, что эти инструменты в хорошем состоянии и будут в будущем.