GI.ShaderAddVariable
ShaderAddVariable (Функции шейдеров) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция сопоставляет указанное имя переменной с указанным типом с шейдером по его уникальному номеру. В дальнейшем при добавлении шейдера в программу шейдеров, этой переменной можно будет задать значение по ее имени. В именах переменных обычно запрещено использовать международные символы. Система не проверяет, действительно ли такая переменная присутствует в исходном тексте шейдера. Также при установке значения переменной в программе шейдеров система не будет создавать исключение, если такой переменной в действительности не существует. Это сделано из-за того, что переменные могут быть исключены из-за оптимизации в зависимости от графического драйвера или даже его версии, и это могло бы вызвать ошибку в месте, где она раньше отсутствовала, к примеру, после обновления драйвера.
Синтаксис
GI.ShaderAddVariable(<Уникальный номер шейдера (INT)>,<Имя переменной (STRING)>,<Тип переменной (STRING)>)
Аргументы
<Уникальный номер шейдера (INT)>
- Аргумент задает уникальный номер шейдера, полученный при его добавлении.<Имя переменной (STRING)>
- Аргумент задаем имя переменной для ассоциации с текущим шейдером.<Тип переменной (STRING)>
- Аргумент тип ассоциируемой переменной. Тип задается строкой[<Признак матрицы>]<Размер><Простой тип>[<Признак массива>]
. Также, как замечание: тип массивов значений (типы с v) разрешается использовать для одиночных значений при указании количества элементов в массиве равным 1 в функции установки значения ShaderProgramSetVariable. На данный момент доступны следующие типы:- 1f,2f,3f,4f,1i,2i,3i,4i,1ui,2ui,3ui,4ui: одно, двух, трех или четырех-компонентый вектор с типом single (f), integer-32 (i), unsigned integer-32 (ui)
- 1fv,2fv,3fv,4fv,1iv,2iv,3iv,4iv,1uiv,2uiv,3uiv,4uiv: тот же самый простой тип, но являющийся массивом значений.
- m2x3f,m3x2f,m2x4f,m4x2f,m3x4f,m4x3f, m2x3fv,m3x2fv,m2x4fv,m4x2fv,m3x4fv,m4x3fv: матрицы указанных размеров со значениями single в ячейках. Также массивы таких матриц (v).
- m2x3ft,m3x2ft,m2x4ft,m4x2ft,m3x4ft,m4x3ft, m2x3fvt,m3x2fvt,m2x4fvt,m4x2fvt,m3x4fvt,m4x3fvt: транспонированные матрицы указанных размеров со значениями single в ячейках. Также массивы таких матриц (v).
- 1d,2d,3d,4d,1dv,2dv,3dv,4dv: одно, двух, трех или четырех-компонентый вектор с типом double (d), также его массивы (v). Числа с типом double поддерживаются не всеми драйверами.
- m2x3d,m3x2d,m2x4d,m4x2d,m3x4d,m4x3d, m2x3dv,m3x2dv,m2x4dv,m4x2dv,m3x4dv,m4x3dv, m2x3dt,m3x2dt,m2x4dt,m4x2dt,m3x4dt,m4x3dt, m2x3dvt,m3x2dvt,m2x4dvt,m4x2dvt,m3x4dvt,m4x3dvt: матрицы указанных размеров со значениями double в ячейках, также массивы таких матриц (v) и транспонированные версии матриц и их массивов (t). Числа с типом double поддерживаются не всеми драйверами.
Примеры
//Фрагмент из файла tetris.sfo лкПрограммы:=List.Create(); Стр:=FileToString("/Window.ini",0); аШ:=aGI.ShaderAdd(0,Стр); aGI.ShaderAddVariable(аШ,"u_color","3fv"); aGI.ShaderAddVariable(аШ,"u_pos0","4fv"); aGI.ShaderAddVariable(аШ,"u_glasssize","4fv"); aGI.ShaderAddVariable(аШ,"u_captionsz","2f"); aGI.ShaderAddVariable(аШ,"u_mode","1i"); лкПрограммы.Add(aGI.ShaderProgramAdd(аШ)); aGI.ShaderProgramSetVariable(лкПрограммы[1],"u_color",,1,0,0); aGI.ShaderProgramSetVariable(лкПрограммы[1],"u_glasssize",,10,23,10,3);