GI.ShaderProgramGetVariableID

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

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