GI.ShaderProgramAdd
ShaderProgramAdd (Функции шейдеров) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция создает новую программу шейдеров из совокупности шейдеров по их уникальным номерам, указанным в аргументах функции, которые могут быть как самими номерами, так и списками номеров. Обычно программы состоят из шейдеров разных видов (см. 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);