Я пытаюсь создать многоструктурный точечный спрайт для приложения iphone, использующего OpenGL ES 2.0.Я не могу найти никаких примеров этого в сети, и это, похоже, не работает.Есть ли какое-то встроенное ограничение, при котором gl_PointCoord нельзя использовать на нескольких текстурах при использовании режима GL_POINTS для точечных спрайтов?
uniform sampler2D tex;
uniform sampler2D blur_tex;
vec4 texPixel = texture2D( tex, gl_PointCoord );
vec4 blurPixel = texture2D( blur_tex, gl_PointCoord );
Я уверен, что правильно передаю текстуры, как я могу это сделатьмультитекстурирование прекрасно работает в режиме TRIANGLE_STRIP, но я надеюсь ускорить процесс с использованием точечных спрайтов.
Если это возможно , ссылка на пример рабочего кода будет очень полезной.Спасибо!
РЕДАКТИРОВАТЬ:
Вот как я передаю текстуры в мой шейдер.Это позволяет мне выполнять мультитекстурирование, когда я нахожусь в режиме TRIANGLE или TRIANGLE_STRIP.
//pass in position and tex_coord attributes...
//normal tex
glActiveTexture(0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, tex0);
glUniform1i(SAMPLER_0_UNIFORM, 0);
//blur tex
glActiveTexture(1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, tex1);
glUniform1i(SAMPLER_1_UNIFORM, 1);
//draw arrays...
Однако, если я использую режим ТОЧКИ, я никогда не вижу вторую текстуру.То есть, ссылаясь на приведенный выше код шейдера, могу ли я сделать
gl_FragColor = texPixel;
ИЛИ
gl_FragColor = blurPixel;
Я вижу ту же текстуру.Что кажется странным.Я предполагаю, что вы НЕ МОЖЕТЕ делать мультитекстурирование на точечном спрайте, и наличие двух активных текстур или двух вызовов gl_PointCoord вызывает проблему.Но я надеюсь, что ошибаюсь.Поэтому, если у кого-то есть простой пример мультитекстурирования, работающего с точечными спрайтами в OpenGL ES 2.0, я был бы рад взглянуть на этот код!
РЕДАКТИРОВАТЬ 2:
вершинный шейдер:
attribute vec4 position;
void main() {
gl_PointSize = 15.0;
gl_Position = position;
}
фрагментный шейдер:
precision mediump float;
uniform sampler2D tex;
uniform sampler2D blur_tex;
void main() {
vec4 texPixel = texture2D( tex, gl_PointCoord );
vec4 blurPixel = texture2D( blur_tex, gl_PointCoord );
//these both do the same thing even though I am passing in two different textures?!?!?!?
//gl_FragColor = texPixel;
gl_FragColor = blurPixel;
}