Автоматическая интерполяция переменных, определенных как varying, выполняется с учетом перспективы, и не имеет значения, какой тип данных интерполируется. В противном случае такие значения не сглаживались бы правильно на гранях при разделении поверхностей. Результат интерполяции был бы непрерывным, но его производная не была бы определена.

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

3.5.4. Спецификатор const

Переменные, объявленные как const, обычно являются константами времени компиляции (кроме объявленных const формальных параметров функций), они не видимы вне шейдера, внутри которого объявлены. Поддерживаются также константы составных типов:

const int numlterations = 10: const float pi = 3.14159: const vec2 v = vec2(1.0. 2.0):

Определение языка

const vec3 u - vec3(v. pi);
const struct light
{
vec3 position; vec3 color;
} fixedLight - light(vec3(1.0. 0.5. 0.5). vec3(0.8. 0.6. 0.5).);

Все эти значения - константы времени компиляции. Компилятор может копировать и сжимать константы во время компиляции, используя точность процессора, на котором выполняется компилятор, а во время выполнения такие константы не требуют ресурсов.

3.5.5. Отсутствие спецификатора Если спецификатор для переменной вообще не указан и она не является описанием параметра функции, то шейдер может и читать из нее значения, и записывать их в нее. Такие переменные, объявленные в глобальной области видимости, могут использоваться совместно шейдерами одного и того же типа, скомпонованными в одну программу. И вершинные, и фрагментные шейдеры могут иметь собственные пространства имен для переменных без квалификаторов. Вне программы такие переменные не видимы. Такие права доступа зарезервированы для переменных, определенных как attribute или uniform, а также для встроенных переменных состояния OpenGL.


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