Я пытаюсь сделать цветной текст на экране.У меня есть текстура, содержащая черное (RGBA 0, 0, 0, 255) представление текста для отображения, и у меня есть другая текстура, содержащая цветовой узор, в котором я хочу отобразить текст. Это должно быть довольнопростое мультитекстурное упражнение, но я не могу заставить работать вторую текстуру.Обе текстуры являются текстурами прямоугольника, потому что с целочисленными значениями координат легче работать.
Код рендеринга:
glActiveTextureARB(GL_TEXTURE0_ARB);
glEnable(GL_TEXTURE_RECTANGLE_ARB);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, TextHandle);
glActiveTextureARB(GL_TEXTURE1_ARB);
glEnable(GL_TEXTURE_RECTANGLE_ARB);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, ColorsHandle);
glBegin(GL_QUADS);
glMultiTexCoord2iARB(GL_TEXTURE0_ARB, 0, 0);
glMultiTexCoord2iARB(GL_TEXTURE1_ARB, colorRect.Left, colorRect.Top);
glVertex2f(x, y);
glMultiTexCoord2iARB(GL_TEXTURE0_ARB, 0, textRect.Height);
glMultiTexCoord2iARB(GL_TEXTURE1_ARB, colorRect.Left, colorRect.Top + colorRect.Height);
glVertex2f(x, y + textRect.Height);
glMultiTexCoord2iARB(GL_TEXTURE0_ARB, textRect.Width, textRect.Height);
glMultiTexCoord2iARB(GL_TEXTURE1_ARB, colorRect.Left + colorRect.Width, colorRect.Top + colorRect.Height);
glVertex2f(x + textRect.Width, y + textRect.Height);
glMultiTexCoord2iARB(GL_TEXTURE0_ARB, textRect.Width, 0);
glMultiTexCoord2iARB(GL_TEXTURE1_ARB, colorRect.Left + colorRect.Width, colorRect.Top);
glVertex2f(x + textRect.Width, y);
glEnd;
Вершинный шейдер:
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_TexCoord[1] = gl_MultiTexCoord1;
}
Фрагментный шейдер:
uniform sampler2DRect texAlpha;
uniform sampler2DRect texRGB;
void main()
{
float alpha = texture2DRect(texAlpha, gl_TexCoord[0].st).a;
vec3 rgb = texture2DRect(texRGB, gl_TexCoord[1].st).rgb;
gl_FragColor = vec4(rgb, alpha);
}
Это кажется очень простым, но в конечном итоге он отображает сплошной черный текст вместо цветного.Я получаю точно такой же результат, если последняя строка фрагмента шейдера читает gl_FragColor = texture2DRect(texAlpha, gl_TexCoord[0].st);
.Изменение последней строки на gl_FragColor = texture2DRect(texRGB, gl_TexCoord[1].st);
приводит к тому, что она вообще ничего не отображает.
Исходя из этого, получается, что вызов texture2DRect для texRGB всегда возвращает (0, 0, 0, 0).Я удостоверился, что GL_MULTISAMPLE
включен, и привязал текстуру к блоку 1, но по какой-то причине я, кажется, фактически не получаю доступ к ней внутри моего фрагментного шейдера.Что я делаю не так?