我正在寻找一种从着色器访问 OpenGL 状态的方法。GLSL 快速参考指南,一个很棒的资源,在这方面帮不上我的忙。
在我正在处理的示例中,我有以下两个着色器:
顶点:
void main()
{
gl_FrontColor = gl_Color;
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = ftransform();
}
分段:
uniform sampler2D tex;
uniform float flattening;
void main( void )
{
vec4 texel;
texel = texture2D(tex, gl_TexCoord[0].st);
texel.r *= gl_Color.r;
texel.g *= gl_Color.g;
texel.b *= gl_Color.b;
texel.a *= gl_Color.a;
gl_FragColor = texel;
}
当我渲染没有纹理的多边形时,它们的 alpha 值是正确的,但它们被分配了黑色。
1,我可以设置什么条件检查,以便在禁用vec4(1.0, 1.0, 1.0, 1.0)
时设置变量“texel”而不是从纹理中采样?GL_TEXTURE_2D
2,如果我为不同的纹理模式编写不同的着色器并在我将使用glEnable
/ glDisable
( GL_TEXTURE_2D
) 的位置在它们之间切换,处理会更快吗?