Сообщение от Den
Когда передаёш текстуру шейдеру (в uniform переменную) передаётся ссылка на неё, или её копия?
|
Передается номер текстурного юнита.
делаешь активным юнит GL_TEXTURE#:
glActiveTexture(GL_TEXTURE0)
потом биндишь текстуру:
glBindTexture(тип текстуры, хендл)
в шейдер передаешь номер:
glUniform1i(номер юниформа, номер юнита)
номер юниформа получаешь c помощью
GetUniformLocation(хендл программы, имя юниформа)
после загрузки программы.
в пиксельном надо обьявить семплер соотвествующий типу текстуры (2D, 3D и т.п):
uniform sampler2D имя;
делаешь выборку из текстуры по текстурным координатам (тоже соответственно типу текстуры):
texture2D(имя, координаты)
и либо сразу передаешь в gl_FragColor, либо блендишь с цветом вершин, либо еще что-то.
ЗЫ
текстурные координаты представляются встроеным аттрибутом gl_MultiTexCoord# по номеру текстурного юнита, 4D вектор, для выборки texture2D нужно 2D вектор, так что юзай либо приведение типа vec2(gl_MultiTexCoord#), либо свиззл gl_MultiTexCoord#.xy.
можно также свои аттрибуты задавать, но это уже отдельная песня