在 webgl 中共享缓冲区
Sharing buffers in webgl
我希望能够在屏幕上缓冲区和屏幕外缓冲区之间共享深度和模板缓冲区。 (或者,换句话说,我希望能够使用屏幕深度和模板缓冲区渲染到纹理。)
我尝试将共享深度/模板渲染缓冲区绑定到默认帧缓冲区,结果却出错 "cannot modify framebuffer 0"。好的,所以我不能修改屏幕上的帧缓冲区。
然后我尝试将默认帧缓冲区的模板/深度缓冲区绑定到辅助渲染缓冲区,但是,它又一次出错了 "cannot query framebuffer 0"。
我目前的解决方法是创建两个离屏帧缓冲区,最后通过纹理和全屏四边形将主离屏缓冲区拼接到屏幕上。不太漂亮。
不幸的是,webgl 是基于 OpenGL ES 的,this 问题表明没有办法为 OpenGL ES 执行此操作。因此,我怀疑,虽然我希望我是错的,但没有 "better" 方法。
不可能。
WebGL 1.0 规范§ 5.14.6:
If framebuffer is null, the default framebuffer provided by the
context is bound and attempts to modify or query state on target
FRAMEBUFFER will generate an INVALID_OPERATION error.
我希望能够在屏幕上缓冲区和屏幕外缓冲区之间共享深度和模板缓冲区。 (或者,换句话说,我希望能够使用屏幕深度和模板缓冲区渲染到纹理。)
我尝试将共享深度/模板渲染缓冲区绑定到默认帧缓冲区,结果却出错 "cannot modify framebuffer 0"。好的,所以我不能修改屏幕上的帧缓冲区。
然后我尝试将默认帧缓冲区的模板/深度缓冲区绑定到辅助渲染缓冲区,但是,它又一次出错了 "cannot query framebuffer 0"。
我目前的解决方法是创建两个离屏帧缓冲区,最后通过纹理和全屏四边形将主离屏缓冲区拼接到屏幕上。不太漂亮。
不幸的是,webgl 是基于 OpenGL ES 的,this 问题表明没有办法为 OpenGL ES 执行此操作。因此,我怀疑,虽然我希望我是错的,但没有 "better" 方法。
不可能。
WebGL 1.0 规范§ 5.14.6:
If framebuffer is null, the default framebuffer provided by the context is bound and attempts to modify or query state on target FRAMEBUFFER will generate an INVALID_OPERATION error.