我正在尝试将彩色文本呈现到屏幕上。我有一个纹理,其中包含要显示的文本的黑色 (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);
为使其根本不渲染任何内容。
基于此,似乎在 texRGB 上调用 texture2DRect 总是返回 (0, 0, 0, 0)。我已经确保它GL_MULTISAMPLE
已启用,并将纹理绑定在单元 1 上,但无论出于何种原因,我似乎实际上并没有在我的片段着色器中访问它。我究竟做错了什么?