GI.ShaderAddVariable

From SunFlurry wiki
Jump to: navigation, search
  ShaderAddVariable (Функции шейдеров)
Объект:Шейдеры объекта GI
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Неверные аргументы, ошибка компиляции.
Визуальность:Нет

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

Синтаксис

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);