Показать сообщение отдельно
Старый 19.07.2011, 22:59   #2
Venom2
 
Сообщений: n/a
Ответ: Вопросы по GLSL

Сообщение от 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.
можно также свои аттрибуты задавать, но это уже отдельная песня
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
den (19.07.2011)