Я ищу способ доступа к состояниям OpenGL из шейдера. Краткое справочное руководство по GLSL , потрясающий ресурс, не может мне в этом помочь.
В примере, над которым я работаю, у меня есть два следующих шейдера:
Vertex:
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;
}
Когда я рендеринг полигонов, которые не текстурированы, их альфа-значения верны, но им назначен черный цвет.
1, какую условную проверку я могу настроить, чтобы переменной 'texel' было присвоено значение vec4(1.0, 1.0, 1.0, 1.0)
вместо выборки из текстуры, когда GL_TEXTURE_2D
отключено?
2, была бы обработка быстрее, если бы я писал разные шейдеры для разных режимов текстурирования и переключался между ними, где бы я использовал glEnable
/ glDisable
(GL_TEXTURE_2D
)?