В вершинном шейдере нельзя объявлять атрибуты.

3.5.2. Спецификатор uniform

Переменные, объявленные как uniform, устанавливаются только вне шейдера и задаются отдельно для каждого примитива. С этим квалификатором можно объявлять переменные всех типов данных и массивы. Все вершинные и фрагментные шейдеры, собранные в одну программу, совместно используют глобальное пространство имен для uniform-переменных. Так что если и в вершинном, и во фраг-ментном шейдере объявлена uniform-переменная с одним и тем же именем, это будет одна и та же переменная.

3,5. Спецификаторы и интерфейс шейдера Щейдер не может изменять uniform-переменные. Это важно, так как несколько обработчиков могут совместно использовать одни и те же ресурсы, и поэтому изменение переменных внутри шейдера может вызвать ошибки.

Несмотря на то что семплер (например, sampler2D) может являться параметром функции, для его объявления все равно нужно использовать спецификатор uniform, так как семплеры непрозрачны. Такое объявление поможет проверить, что семплер инициализирован текстурой и текстурный модуль правильно используется внутри шейдера.

3.5.3. Спецификатор varying

Через переменные, объявленные как varying, вершинный шейдер передает результаты вычислений фрагментному шейдеру. Из таких переменных во время выполнения формируется интерфейс между вершинным и фрагментным шейдерами. Для каждого атрибута, принадлежащего примитиву, и каждой вершины должно быть задано свое значение, и эти значения интерполируются для фрагментов примитива. Вершинный шейдер записывает значения каждой вершины в varying-ne-ременную, и когда фрагментный щейдер читает из нее, он получает интерполированное между вершинами значение. Если для какого-либо атрибута интерполяция не требуется, вершинный шейдер вообще не должен передавать никаких значений фрагментному. Вместо этого приложение само передаст нужное значение фрагментному шейдеру через uniform-переменную.

Наряду с использованием этих переменных для интерполированных значений, их можно использовать также для любого значения, которое будет часто изменяться - с каждым новым треугольником, или группой треугольников, или вершиной. Быстрее было бы передать эти значения в attribute-переменные и потом переадресовать как varying-переменные, так как частое использование uniform-переменных может плохо повлиять на производительность.


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