GI.ShaderProgramGetVariableID
| ShaderProgramGetVariableID (Функции шейдеров) | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||
Функция возвращает уникальный номер переменной в указанной по номеру программе шейдеров. Если такая переменная не найдена (к примеру, возможно, она исключена из-за инициализации), функция возвратит -1. Возвращенный номер можно в дальнейшем использовать в прямых вызовах спецификации (к примеру, в простых моделях, когда необходимо вызвать glUniform для спецификации OpenGL).
Синтаксис
GI.ShaderProgramGetVariableID(<Уникальный номер программы (INT)>,<Имя переменной (STRING)>):<Уникальный номер переменной в программе шейдеров (INT)>
Аргументы
<Уникальный номер программы (INT)>- Аргумент задает уникальный номер программы шейдеров.<Имя переменной (STRING)>- Аргумент задает имя переменной для нахождения ее уникального номера.
Возвращаемое значение
Возвращается числовое значение.
Примеры
//Фрагмент из файла tetris.sfo
x:=лкСмещениеСтаканаX+dx*j-dx/2;
аМодель:=GIModel.New();
аОбъект:=aGI.AddObject("EXP");
аОбъект.Model(аМодель);
аБуфер:=Buffer.Create();
аСмещ:=0;
аБуфер.AddValues(аСмещ,4,201,aGI.GL_TEXTURE_2D,0);//glBindTexture
аБуфер.AddValues(аСмещ,4,300,лкПрограммы[3]);//ShaderProgramUse
//Использование полученного номера переменной u_scrpos в функции glUniform4fv
аБуфер.AddValues(аСмещ,4,301,aGI.ShaderProgramGetVariableID(лкПрограммы[3],"u_scrpos"),4,$004);
//Значения устанавливаемой переменной
аБуфер.AddValues(аСмещ,104,x,aGI.Height-y,2*dx,2*dx);//u_scrpos
//Использование полученного номера переменной u_time в функции glUniform1f (система сама найдет значение при прорисовке модели)
аБуфер.AddValues(аСмещ,4,302,aGI.ShaderProgramGetVariableID(лкПрограммы[3],"u_time"));//u_time
//Использование полученного номера переменной u_starttimeв функции glUniform1f
аБуфер.AddValues(аСмещ,4,301,aGI.ShaderProgramGetVariableID(лкПрограммы[3],"u_starttime"),1,$001);
//Значение устанавливаемой переменной
аБуфер.AddValues(аСмещ,104,aGI.WorldTime);//u_starttime
//Нарисуем квадрат, шейдер сделает остальное
аБуфер.AddValues(аСмещ,4,1,aGI.GL_QUADS);//glBegin
аБуфер.AddValues(аСмещ,4,100);аБуфер.AddValues(аСмещ,104,x,y,-0.3);//glVertex
аБуфер.AddValues(аСмещ,4,100);аБуфер.AddValues(аСмещ,104,x,y+2*dx,-0.3);//glVertex
аБуфер.AddValues(аСмещ,4,100);аБуфер.AddValues(аСмещ,104,x+2*dx,y+2*dx,-0.3);//glVertex
аБуфер.AddValues(аСмещ,4,100);аБуфер.AddValues(аСмещ,104,x+2*dx,y,-0.3);//glVertex
аБуфер.AddValues(аСмещ,4,2);//glEnd
аБуфер.AddValues(аСмещ,4,0);//EOF
аМодель.SimpleModel(аБуфер);