【发布时间】:2018-03-25 08:47:40
【问题描述】:
我的目标是使用gl.frameBufferTextureLayer 将切片渲染为 3D 纹理。但是,当我用gl.readPixels 读回数据时,什么都没有呈现。
当我将 gl.TEXTURE_3D 更改为 gl.TEXTURE_2D_ARRAY 时,它工作正常,但在测试中 here 他们肯定会在 FBO 上附加一层 3D 纹理。 WebGL docs 没有说明纹理应该是什么,但是
GLES3 docs 确实允许纹理成为 3D 纹理。我已经检查了帧缓冲区的完整状态和所有这些东西..
是否有任何资源可以将 3D 纹理层附加到 WebGL2 中的 FBO,这甚至可能吗?一些代码:
this.fbo= gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, this.fbo);
this.colorTexture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_3D, this.colorTexture);
gl.texParameteri(gl.TEXTURE_3D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
gl.texParameteri(gl.TEXTURE_3D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texImage3D(gl.TEXTURE_3D, 0, gl.RGBA8, 64, 64, 64, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
this.renderBuffer = gl.createRenderbuffer();
gl.bindRenderbuffer(gl.RENDERBUFFER, this.renderBuffer);
gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, 64, 64);
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, this.renderBuffer);
// Use level 1 in 3D texture
// Works when texture is GL_TEXTURE_2D_ARRAY
gl.framebufferTextureLayer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, this.texture, 0, 1);
// ... Render scene
let data = new Uint8Array(64 * 64 * 4);
gl.readPixels(0, 0, 64, 64, gl.RGBA, gl.UNSIGNED_BYTE, data, 0); // data is empty
【问题讨论】:
标签: javascript webgl rendering