如果以下内容没有多大意义,请参阅下面的背景部分,我省略了大部分上下文以使问题尽可能清楚。
我有两个具有以下特征的 WebGLRenderingContexts:
- WebGLRenderingContext:InputGL(允许对其帧缓冲区进行读写操作。)
- WebGLRenderingContext:OutputGL(只允许对其帧缓冲区进行写操作。)
目标:在移动设备上,在 33 毫秒 (30fps) 内定期将 InputGL 的渲染叠加到 OutputGL 的渲染上。
InputGL 和 OutputGL 的帧缓冲区都来自不同的进程。两者都在一个 window.requestAnimationFrame 回调中可用(并且具有完整的帧缓冲区)。由于 InputGL 需要读操作,而 OutputGL 只支持写操作,所以 InputGL 和 OutputGL 不能合并为一个 WebGLRenderingContext。
因此,我想在每个 window.requestAnimationFrame 回调中将帧缓冲区内容从 InputGL 复制到 OutputGL。这使我可以在 InputGL 上保持读/写支持,并且只在 OutputGL 上使用 write。它们都没有附加(常规)画布,因此画布覆盖是不可能的。我有以下代码:
// customOutputGLFramebuffer is the WebXR API's extended framebuffer which does not allow read operations
let fbo = InputGL.createFramebuffer();
InputGL.bindFramebuffer(InputGL.FRAMEBUFFER, fbo)
// TODO: Somehow get fbo data into OutputGL (I guess?)
OutputGl.bindFramebuffer(OutputGl.FRAMEBUFFER, customOutputGLFramebuffer);
// Drawing to OutputGL here works, and it gets drawn on top of the customOutputGLFramebuffer
我不确定这是否需要以某种特定的顺序绑定,或者某种类型的纹理操作,对此的任何帮助将不胜感激。
背景:我正在尝试将 Unity WebGL 与未发布的WebXR API结合使用。WebXR 使用其自己的、修改过的 WebGLRenderingContext,它不允许从其缓冲区中读取(出于隐私考虑)。但是,Unity WebGL 需要从其缓冲区中读取。两者都在同一个 WebGLRenderingContext 上运行会导致 Unity 的读取操作出错,这意味着它们需要分开。这个想法是定期将 Unity 的帧缓冲区数据叠加到 WebXR 的帧缓冲区上。
如果需要,也支持 WebGL2。