Мне нужно отрендерить до 2 текстур (конечно, на проходе)
var extbuffers = gl.getExtension('WEBGL_draw_buffers');
var tex1 = gl.createTexture();
//gl.activeTexture(gl.TEXTURE1);
gl.bindTexture(gl.TEXTURE_2D, tex1);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, PVS, PVS, 0, gl.RGBA,gl.FLOAT,null);
var tex2 = gl.createTexture();
//gl.activeTexture(gl.TEXTURE2);
gl.bindTexture(gl.TEXTURE_2D, tex2);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, PVS, PVS, 0, gl.RGBA, gl.FLOAT, null);
gl.bindFramebuffer(gl.FRAMEBUFFER, gl.createFramebuffer());
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex1, 0);
gl.framebufferTexture2D(gl.FRAMEBUFFER, extbuffers.COLOR_ATTACHMENT1_WEBGL, gl.TEXTURE_2D, tex2, 0);
extbuffers.drawBuffersWEBGL(
// Here, we give it the list of slots we want to draw to.
[
extbuffers.COLOR_ATTACHMENT0_WEBGL, // gl_FragData[0]
extbuffers.COLOR_ATTACHMENT1_WEBGL // gl_FragData[1]
]
);
и фрагментный шейдер:
#extension GL_EXT_draw_buffers : require
void main() {
gl_FragData[0] = vec4(pos,vit);
gl_FragData[1] = vec4(col,1.0);
}
, но теперь моя проблема: как я могу прочитатьтекстуры?Я перечитал некоторые подобные вопросы, но о FramebufferRenderbuffer
я хотел бы:
gl.readBuffer(gl.COLOR_ATTACHMENT0);
gl.readPixels(...);
gl.readBuffer(gl.COLOR_ATTACHMENT1);
gl.readPixels(...);
Спасибо.
РЕДАКТИРОВАТЬ: я использую Webgl 1, но с adhoc расширение WEBGL_draw_buffers