Есть ли инструмент lint для языка шейдинга OpenGL?

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

Если бы у меня был инструмент lint, который мог бы просто проверять вершинный или фрагментный шейдер на наличие синтаксических ошибок, я мог бы добавить его в процесс сборки и остановить сборку.

Я не смог найти такой инструмент. Я начал пытаться написать его, но я работаю над OpenGL ES и у меня был проблемы при попытке написать настольную программу, которая связывается с библиотеками ES.

Может я где-то пропустил. Существует ли такой инструмент?


person benzado    schedule 24.10.2010    source источник
comment
Вы можете просто использовать поддержку компиляции шейдеров графических драйверов во время процесса сборки (по крайней мере, когда это возможно). Однако многие из них слишком снисходительны и пропускают ошибки, которые следует ловить. Таким образом, я ищу инструмент strict GLSL lint или валидатор.   -  person Tronic    schedule 08.11.2010


Ответы (3)


Вы можете создавать шейдеры в командной строке, точно так же, как вы компилируете свою программу на C или C++ или что-то еще, что вы используете. Если вы используете Makefile, просто добавьте компиляцию шейдеров.

Вы можете использовать компилятор Cg для компиляции шейдеров Cg и GLGL. Он должен быть доступен на всех платформах.

person BЈовић    schedule 25.10.2010
comment
Компилятор Cg выдаст вам ошибки, чтобы вы могли обрабатывать их в своих сценариях сборки. Или вы можете привязать компилятор Cg к пользовательскому приложению C++ и следить за тем, чтобы он возвращал любые ошибки, которые затем можно обрабатывать по мере необходимости. - person ssube; 25.10.2010
comment
Выглядит многообещающе, но, похоже, не поддерживает OpenGL ES 2.0, именно ту версию, которая мне нужна. - person benzado; 27.10.2010
comment
Вам просто нужно установить компилятор cg на свой компьютер и скомпилировать шейдеры. Компилятор Cg можно использовать как инструмент командной строки. - person BЈовић; 27.10.2010
comment
С Cg используйте параметр командной строки -ogles, чтобы получить совместимость с OpenGL/ES, и параметр -strict, чтобы получить строгую проверку совместимости. - person Chris Dodd; 25.09.2014

Кроме того, есть эталонный компилятор GLSL (обрабатывает OpenGL и OpenGL ES).

http://www.khronos.org/opengles/sdk/tools/Reference-Compiler/

person Marcus O Platts    schedule 25.09.2014

Для этого можно адаптировать Shader Toy. Он компилирует код шейдера для WebGL (который основан на OpenGL ES) и сообщает об ошибках (а также запускает шейдер, чтобы вы могли проверить вывод).

Для запустить его.

Я не уверен, как бы вы использовали результат состояния компиляции, чтобы остановить процесс сборки... Есть способы записи результатов в локальный файл из javascript, но они несколько запутаны...

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

С другой стороны, если вам удастся заставить ваше настольное приложение работать со ссылками на библиотеки ES, то, похоже, этот инструмент принесет пользу многим разработчикам.

person LarsH    schedule 25.10.2010
comment
В составе инструментов разработчика Apple есть OpenGL Shader Builder, поэтому я в основном настроен на интерактивное тестирование. Я хочу, чтобы проверка синтаксиса выявляла глупые ошибки, когда я вношу небольшие изменения или когда пытаюсь использовать несуществующие глобальные переменные (поскольку в ES 2.0 было удалено так много всего, но во многих учебниках предполагается настольный GLSL). - person benzado; 27.10.2010