Мой код работает, но мне интересно, почему!свяжите текстуру, прежде чем нарисовать ее (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)', так что за привязка перед тем, как нарисовать? –
Связывание означает установку текстуры в активном блоке. Вы ранее активировали единицу 0, вызывая glActiveTexture (GL_TEXTURE0); , Как вы могли догадаться, GL_TEXTURE0 указывает на 0 единиц. После этого вы связали текстуру, вызвав glBindTexture. Если вы вызываете glBindTexture с нулевым (или 0, чтобы быть явным), вы удаляете текстуру из единицы. Также имейте в виду, что вы можете переключать активные блоки, но, переключая активные блоки, вы не отказываетесь от изменений в ранее активном блоке, поэтому там привязана текстура - остается там. – spectre
Okk ... и если перед выполнением привязки нет явного активного блока, тогда по умолчанию связывается с единицей 0. –