if (foo > 5.0)
gl_Position += 1.0;

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

8.4. Средства разработки шейдеров

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

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

Похожим способом можно заносить в gl_FragColor отладочную информацию. Допустим, в шейдере есть математическая функция, значение которой должно принадлежать диапазону [0, 1] со средним значением 0,5, можно занести в gl _FragCol or зеленый цвет, если значение функции меньше нуля, красный цвет, если значение от 0 до 0,5, синий, если значение от 0,5 до 1,0, и белый, если значение больше 1,0. Такой способ отладки может быстро показать, что же не так.


⇐ Предыдущая| |Следующая ⇒