WebGL:如何使用自定义混合模式将每次绘制与先前的帧缓冲区混合?

WebGL: How can blend each draw with the previous framebuffer with custom blending modes?

我正在使用 webgl 实现画笔引擎。对于我绘制的每个图章,我想将此图章与帧缓冲区中的先前绘图混合,使用我自己的自定义混合功能来实现一些很酷的效果。我知道我可以将图章绘制到自定义纹理,并使用着色器将自定义纹理与之前的绘图帧缓冲区混合。但是由于 canvas 很大,要画的图章很多,所以性能很慢。

我知道在 OpenGL ES2.0 中,Apple 提供了一个 EXT_shader_framebuffer_fetch 扩展来执行此操作,而且速度很快。但是如何在 WebGL 中以更好的性能做到这一点?

您还不能从 WebGL 中的目标帧缓冲区中获取,即使有扩展也是如此。

您需要在两个不同的支持纹理的帧缓冲区之间来回切换,从一个帧缓冲区中采样,同时绘制到另一个帧缓冲区中。 (如果需要,可以在此处每帧绘制多次,以响应鼠标事件!)然后只需在 requestAnimationFrame 中的每一帧将最近绘制的帧缓冲区的纹理绘制到后缓冲区。