Внешний интерфейс компилятора, созданный 3Dlabs, - полезный инструмент для разработки на языке шейдеров OpenGL, он может использоваться и другими компаниями, желающими создать компилятор языка шейдеров OpenGL. Внешний интерфейс был создан сразу после завершения создания спецификации. За исключением препроцессора (который был создан из другого открытого препроцессора), он разрабатывался с нуля с помощью утилит flex и bison. Это послужило хорошим поводом еще раз перепроверить спецификацию и найти дефекты языка перед новым ее выпуском. И действительно, несколько дефектов было найдено именно этим способом, а спецификация была доработана еще перед ее выпуском.
Внешний интерфейс компилятора языка шейдеров OpenGL, в силу его чистой реализации, служит дополнительной документацией о языке. Разработчик должен вначале изучить спецификацию, но если нужны подробности, чтобы получить точный ответ, следует обратиться к интерфейсу компилятора.
Создатели реализаций OpenGL, которые основывают свой компилятор на внешнем интерфейсе компилятора от 3Dlabs, очень помогают своим будущим Пользователям: семантика языка будет проверяться одинаково во всех реализациях, которые будут использовать этот интерфейс. Это будет очень удобно для разработчиков, так как они смогут полагаться на согласованную обработку ошибок даже в разных реализациях OpenGL.
Скорее всего, немногие читатели этой книги будут разрабатывать компилятор языка шейдеров OpenGL, но эта ссылка будет полезна для всех. Исходный код внешнего интерфейса компилятора можно загрузить с веб-сайта компании 3Dlabs (http://www.3dLabs.com).
8.5. Итоги
Создание шейдеров во многих отношениях похоже на другие задачи, решаемые разработчиками. Некоторое количество здравого смысла очень помогает принять верное решение. Принципы обычного программирования тоже можно применять при разработке шейдеров, особенно справедливо это для ранних поколений программируемых графических акселераторов. Так как ранние реализации языка шейдеров OpenGL могут быть в каком-то смысле неполными, компиляторы пока несовершенны, характеристики производительности оборудования от разных производителей значительно различаются, а инструментальные средства для разработчиков оставляют желать лучшего. RenderMonkey - единственное доступное на сегодняшний день средство разработки; но, можно надеяться, остальные Не заставят себя долго ждать.
В то же время написание шейдеров для программируемых графических акселераторов представляет собой нечто уникальное. Нужно принимать правильные решения о разделении вычислений между главным, вершинным и фрагментным процессорами. Не лишними будут хорошая математическая подготовка и знание компьютерной графики, доскональное знание работы OpenGL и понимание аппаратной базы. Зачастую приходится разрабатывать шейдер совместно с художником. Для разработчика это может послужить стимулом сделать шейдер более параметрнзируемым, для того чтобы его можно было использовать всесторонне.
8.6. Ссылки
Существует множество книг, описывающих принципы и практические приемы разработки программного обеспечения. Две из них предназначены специально для разработки шейдеров: [4 и 2]. Некоторые рассуждения в этих книгах относятся скорее к RenderMan, но большинство принципов применимо и к разработке шейдеров на языке шейдеров OpenGL.