私のプログラムでは、t0 と t1 の 2 つのテクスチャを使用しています。t1 は追加で、場合によってのみ必要です。
.....
glActiveTexture ( GL_TEXTURE1 );
if ( mDisplayMode == EDM_DEFAULT ){
glBindTexture( GL_TEXTURE_2D, 0 ); // In this case I don't need t1
}else{
glBindTexture( GL_TEXTURE_2D, mglDegreeTexture ); // In this case t1 will overlap t0
}
shader->setUniformValue( "textureId1", 1 );
描画用シェーダー:
.....
vec4 c1 = texture( textureId0, uv );
vec4 c2 = texture( textureId1, gridUV );
float a = c2.a;
gl_FragColor = ( 1.0 - a )*c1 + a*c2;
正常に動作します。必要に応じて、2 番目のテクスチャが最初に重なります。glBindTexture( .. , 0 ) を使用するとゼロ テクスチャ (0,0,0,0) が返されると仮定しますが、NVidia ドライバーを 314.07 に更新した後、私のコードは glBindTexture( .. , 0 ) return (0,0) のように黒い画面を生成します。 ,0,1) テクスチャ。
いくつかのテストを実行します: シェーダーを使用
....
vec4 c1 = texture( textureId0, uv );
vec4 c2 = texture( textureId1, gridUV );
float a = c2.a;
if (a == 1){
gl_FragColor = vec4(1,0,0,0);
return;
}
if ( a == 0){
gl_FragColor = vec4(0,1,0,0);
return;
}
gl_FragColor = ( 1.0 - a )*c1 + a*c2;
古いドライバー (296、306) では緑色の画面が表示され、新しいドライバーでは赤色の画面が表示されます。Win 7 (GeForce 210) と win XP (GTX 260) を搭載した 2 台のコンピューターでテストしました。
したがって、私の質問は次のとおりです。0 を 2 番目のパラメーターとして glBindTexture を使用するのは正しいのですが、新しいドライバーで同じ結果 ( 0000 texture ) を達成するにはどうすればよいですか?