我的代碼有效,但我想知道爲什麼!在繪製之前綁定紋理(webgl)
我有2個紋理:
uniform sampler2D uSampler0;
uniform sampler2D uSampler1;
void main() {
vec4 color0 = texture2D(uSampler0, vTexCoord);
vec4 color1 = texture2D(uSampler1, vTexCoord);
gl_FragColor = color0 * color1;
}
和我的js代碼
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D,my_texture_ZERO);
gl.uniform1i(program.uSampler0,0);
gl.activeTexture(gl.TEXTURE1);
gl.bindTexture(gl.TEXTURE_2D,my_texture_ONE);
gl.uniform1i(program.uSampler1);
// uncomment one of the 3, it works.
// gl.bindTexture(gl.TEXTURE_2D, my_texture_ZERO);
// gl.bindTexture(gl.TEXTURE_2D, my_texture_ONE);
// gl.bindTexture(gl.TEXTURE_2D, texture_FOR_PURPOSE_ONLY);
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
gl.draw之前,我已經測試了3個綁定, 每一件作品!
所以,我不明白真正的管道基礎。
感謝一些解釋
好的,但它不工作,如果我做一個:'gl.bindTexture(gl.TEXTURE_2D,null)',那麼綁定之前畫的立場? –
綁定代表在活動單元中設置紋理。您之前通過調用glActiveTexture(GL_TEXTURE0)激活了單位0; 。正如你所猜測的 - GL_TEXTURE0表示0單位。之後,您通過調用glBindTexture來綁定紋理。如果你用null(或0是明確的)調用glBindTexture,你將從單元中移除紋理。另外請記住,您可以切換活動單位,但通過切換活動單位,您不會丟棄先前活動單位中的更改,因此紋理將停留在那裏。 – spectre
Okk ...並且如果在進行綁定之前沒有顯式活動單元,則默認情況下該綁定處理單元0。 –