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(аБуфер);