8.2.6. Анализ информационного журнала

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

8.3. Отладка шейдера

Инструментальные средства для разработки шейдеров еще очень несовершенны, и отладка шейдеров - трудная задача. Вот несколько практических советов, которые могут оказаться полезными при отладке шейдеров.

8.3.1. Анализ выходных данных вершинного шейдера

Чтобы узнать, работает ли код вершинного шейдера так, как ожидалось, можно проверять промежуточные значения для выявления неожиданных результатов. Если таковые будут обнаружены, можно изменить одно из выходных значений шейдера и посмотреть, как это повлияет на результат. Например, если разработчик ожидает, что значение foo не превысит 5,0, можно задавать цвет фрагмента черным, розовым или ярко-зеленым при превышении переменной foo этого значения. Если это недостаточно очевидно и преобразованные однородные координаты уже вычислены, можно попробовать сделать что-то вроде следующего:

if (foo > 5.0)

gl_Position += 1.0; Эта операция добавляет 1 к каждому компоненту преобразованных координат, для которых foo больше 5,0, и можно увидеть сдвиг объекта на экране. Этим способом можно систематически проверять предположения о промежуточных значениях, поступающие от вершинного шейдера.

I 8.3.2. Анализ выходных данных фрагментного шейдера

Возможные выходные данные фрагментного шейдера - цвет фрагмента, его глубина, или и то и другое, или признак того, что буфер кадров обновляться не будет из-за ключевого слова discard. Значение глубины, возможно, не будет полезным при отладке, а вот цвет можно использовать, устанавливая определенные цвета для «неправильных» выходных данных. Ключевое слово discard можно использовать для отбрасывания фрагментов с какими-либо ненужными качествами, тогда они вообще не будут отображаться на экране. Таким образом, разработчик получит зрительный образ на экране и сможет понять, что происходит внутри шейдера.

Например, если нет уверенности в том, что все координаты 2В-тскстуры принадлежат диапазону от 0 до 1,0, можно сделать в шейдере проверку с помощью i f и отбросить фрагменты, не удовлетворяющие этому условию. Можно отбрасывать все фрагменты, в которых и $-, и f-координаты текстуры больше 0,5 или любая координата больше 0,99 и т. д. Изображение будет нарисовано с «пропавшими» пикселами там, где фрагменты были отброшены. Ключевое слово discard здесь оказывается полезным, так как его можно помещать в любое место фрагментного шейдера. Начиная проверку, нужно поместить этот оператор в самом начале шейдера и по мере проверки последующих частей кода постепенно передвигать его вниз.


⇐ вернуться назад | | далее ⇒