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

Передача информации в шейдер и из него немного отличается от обычной передачи информации в функцию и из функции при обычном программировании. Информация передается использованием встроенных переменных и определенных разработчиком attribute-, uniform-, varying-переменных - записью в них и чтением из них. Наиболее часто используемые встроенные переменные приведены в примере в начале этой главы. Это gl_Position для передачи однородных координат вершины и gl_FragCal or для передачи цвета фрагмента из фрагментно-го шейдера (полный список всех встроенных переменных см. в главе 4). Attribute-, uniform- и varying-переменные в примерах описаны коротко, они использованы для передачи информации в шейдеры и из них. Каждый вид переменных будет описан далее в этом разделе.

Attribute-, uniform- или varying-переменные должны быть объявлены в глобальной области видимости, так как они должны быть видимы вне шейдеров, и в случае единственной программы все они находятся в одном пространстве имен.

Спецификаторы, если они нужны, указывают перед типом переменной, и так как в языке шейдеров нет типов по умолчанию, объявление любой переменной с квалификатором всегда должно содержать тип:

attribute float Temperature:
const int NumLïghts = 3:
uniform vec4 LightPosition[MumLights];
varying float Light Intensity:

3.5.1. Спецификатор attribute

Приложение использует attribute-переменные (или атрибуты) для передачи данных во фрагментный шейдер. Для каждой вершины обычно задаются новые значения либо непосредственно приложением, либо иным элементом. Существуют встроенные attribute-переменные, такие как gl_Vertex и gljtormal, предназначенные для получения состояний OpenGL. Разработчик может объявлять и свои attribute-переменные.

Возможность задавать типы для атрибутов ограничена: атрибутами могут быть только числа с плавающей запятой, векторы чисел с плавающей запятой и матрицы. Целые числа, логические переменные, структуры или массивы не могут быть атрибутами. Это сделано для того, чтобы увеличить производительность, так как атрибуты меняются довольно часто. Шейдер не может изменить переменные, объявленные атрибутами.


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