シェーダーから OpenGL の状態にアクセスする方法を探しています。すばらしいリソースであるGLSL クイック リファレンス ガイドは、これに関してはあまり役に立ちませんでした。
私が取り組んでいる例では、次の 2 つのシェーダーがあります。
バーテックス:
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;
}
テクスチャが適用されていないポリゴンをレンダリングすると、アルファ値は正しいのに黒が割り当てられます。
vec4(1.0, 1.0, 1.0, 1.0)
1、変数 'texel' が無効になっているときにテクスチャからサンプリングするのではなく、変数 'texel' が設定されるようにするには、どのような条件チェックを設定できますGL_TEXTURE_2D
か?
2、テクスチャリングモードごとに異なるシェーダーを作成し、glEnable
/ glDisable
( GL_TEXTURE_2D
) を使用する場所でシェーダーを切り替えると、処理が速くなりますか?