GI.ShaderProgramAdd

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

Функция создает новую программу шейдеров из совокупности шейдеров по их уникальным номерам, указанным в аргументах функции, которые могут быть как самими номерами, так и списками номеров. Обычно программы состоят из шейдеров разных видов (см. ShaderAdd), но позволяется также использовать шейдеры одинаковых видов (последние будут складываться в один, таким образом, к примеру, можно добавить часто используемые функции в отдельный шейдер). Функция возвращает уникальный номер программы шейдеров, который можно в дальнейшем использовать, к примеру, в функции ShaderProgramUse. При создании прогаммы в определенных спецификациях происходит процесс компоновки отдельных шейдеров, что может занять некоторое время или вызвать ошибку с развернутым описанием. Система ассоциирует создаваемую программу со всеми переменными, заданными для шейдеров, входящих в нее. Цифровые значения перерменным могут быть в дальнейшем заданы или изменены для программы с помощью функции ShaderProgramSetVariable.

Синтаксис

GI.ShaderProgramAdd(<Уникальный номер шейдера 1 (INT,LIST)>,<Уникальный номер шейдера 2 (INT,LIST)>...):<Уникальный номер программы (INT)>

Аргументы

  • <Уникальный номер шейдера 1 (INT,LIST)>, <Уникальный номер шейдера 2 (INT,LIST)>... - Аргументы задают уникальные номера шейдеров для компоновки, либо их списки. Как минимум один аргумент должен присутствовать.

Возвращаемое значение

Возвращается новый уникальный номер программы шейдеров, состоящей из указанных в аргументе шейдеров.

Примеры

//Фрагмент из файла 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);