在我的程序中,我使用了2種紋理:t0和t1。 T1是額外的,只是在某些情況下需要:在OpenGL中綁定零紋理
.....
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;
它的正常工作:在需要的時候第二個紋理重疊第一。假設使用glBindTexture(..,0)返回零紋理(0,0,0,0),但在將NVidia驅動程序更新到314.07後,我的代碼產生黑屏,如glBindTexture(..,0)return(0,0 ,0,1)紋理。
我進行了一些測試: 的Shader
....
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)在兩臺電腦上測試了它。
所以我的問題是:使用glBindTexture 0作爲第二個參數是正確的,我怎樣才能用一個新的驅動程序實現相同的結果(0000紋理)?
太棒了!這是合乎邏輯的使用(0,0,0,0)作爲「零」紋理;(我沒有找到有什麼辦法來定義默認紋理? – Jeka 2013-03-07 16:06:50
@Jeka:這是一個像任何其他紋理,所以如果你設置它爲1x1 RGBA紋理,其內容爲0,0,0,0的單一紋素,它將完成你以後的工作,通常這樣使用它,所以你可能會混淆任何人閱讀你的代碼(哦,並可能發現更多驅動程序錯誤) – Bahbar 2013-03-07 16:12:13
看起來很有趣;)1x1 RGBA紋理是我當前的解決方案,但我不嘗試將它與0綁定 – Jeka 2013-03-11 07:57:43