GI.ShaderProgramSetVariable
ShaderProgramSetVariable (Функции шейдеров) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция устанавливает значение переменной (заданной по ее имени) программы шейдеров (заданной по ее уникальному номеру). Количество значений указывается для переменных, содержащих массивы, и задает количество значений в массиве. Значения могут быть заданы несколькими аргументами как числа (вещественные или целые), либо одним аргументом с типом список (содержащий сами значения), либо буфер или структура данных записи. В последнем случае, размера буфера с данными должно быть достаточно, чтобы уместить весь массив значений. Заданная один раз, переменная для данной программы шейдеров в дальнейшем сохраняет свое значение до того момента, пока программа не будет удалена или значение переменной не будет задано снова. Важно: для спецификации OpenGL данную функцию нельзя использовать внутри последовательности glBegin ... glEnd
, иначе значение не будет установлено. Заданная один раз, переменная для данной программы шейдеров в дальнейшем сохраняет свое значение до того момента, пока программа не будет удалена или значение переменной не будет задано снова. См. также функцию ShaderAddVariable для описания способа указания на типы переменных.
Синтаксис
GI.ShaderProgramSetVariable(<Уникальный номер программы (INT)>,<Имя переменной (STRING)>,<Количество значений (INT)>=1,<Значение 1>,<Значение 2>...)
Аргументы
<Уникальный номер программы (INT)>
- Аргумент задает уникальный номер программы шейдеров, значение переменной которой необходимо изменить.<Имя переменной (STRING)>
- Аргумент задает имя переменной программы шейдеров, значение переменной которой необходимо изменить. Обычно имена переменных не могут содержать менждународных символов.<Количество значений (INT)>
- (необязательный аргумент) Аргумент задает количество значений в массиве, если переменная содержит массив.<Значение 1>,<Значение 2>...
- (необязательный аргумент) Аргументы задают значения, способ задания значений зависит от типа первого из аргументов значений. Доступны следующие типы:- Буфер или Объект записи с буфером: значения будут получены из буфера общий размер буфера должен быть не меньше размера одного значения с типом данной переменной (для vec4, к примеру, это 4 значения по 4 байта = 16 байт) умноженного на количество значений, если переменная является массивом.
- Список: значения будут получены из списка общее количество значений в списке должно быть не меньше количества чисел в одном значении с типом как у данной переменной (для vec4, к примеру, это 4 значения) умноженного на количество значений, если переменная является массивом.
- Число: все значения будут получены из аргументов функции. Общее количество значений должно быть равно количеству чисел в одном значении с типом как у данной переменной (для vec4, к примеру, это 4 значения) умноженному на количество значений, если переменная является массивом.
Примеры
... aGI.ShaderProgramSetVariable(аПрограмма,"u_pos0",,x0,y0,dx,dx); aGI.ShaderProgramSetVariable(аПрограмма,"u_mode",,?(лкРежимИгры=0,1,0)); aGI.ShaderProgramUse(аПрограмма); aGI.glBegin(aGI.GL_QUADS); aGI.glVertex3f(0,0,0.5); aGI.glVertex3f(aGI.Width,0,0.5); aGI.glVertex3f(aGI.Width,aGI.Height,0.5); aGI.glVertex3f(0,aGI.Height,0.5); aGI.glEnd(); ...