是否将帧缓冲区数据从一个WebGLRenderingContext复制到另一个?

是否将帧缓冲区数据从一个WebGLRenderingContext复制到另一个?,webgl,unity-webgl,webgl2,webxr,Webgl,Unity Webgl,Webgl2,Webxr,请参考下面的背景部分,如果以下内容没有多大意义,我省略了大部分上下文,以便尽可能清楚地说明问题 我有两个WebGlrenderingContext,具有以下特征: WebGLRenderingContext:InputGL(允许对其帧缓冲区执行读写操作。) WebGLRenderingContext:OutputGL(只允许对其帧缓冲区执行写操作。) 目标:在移动设备上,在33毫秒(30帧)内定期将InputGL的渲染叠加到OutputGL的渲染上 InputGL和OutputGL的帧缓冲区

请参考下面的背景部分,如果以下内容没有多大意义,我省略了大部分上下文,以便尽可能清楚地说明问题

我有两个WebGlrenderingContext,具有以下特征:

  • WebGLRenderingContext:InputGL(允许对其帧缓冲区执行读写操作。)
  • WebGLRenderingContext:OutputGL(只允许对其帧缓冲区执行写操作。)
目标:在移动设备上,在33毫秒(30帧)内定期将InputGL的渲染叠加到OutputGL的渲染上

InputGL和OutputGL的帧缓冲区都可以从单独的进程中提取。两者都可以在一个窗口内使用(并且具有完整的帧缓冲区)。requestAnimationFrame回调。由于InputGL需要读操作,而OutputGL只支持写操作,因此InputGL和OutputGL不能合并到一个WebGLRenderingContext中

因此,我想在每个window.requestAnimationFrame回调中将帧缓冲区内容从InputGL复制到OutputGL。这允许我在InputGL上保持读/写支持,并且只在OutputGL上使用写。他们都没有(常规)画布附加,所以画布覆盖是不可能的。我有以下代码:

// 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与unreleased的结合。WebXR使用自己修改的WebGLRenderingContext,不允许从其缓冲区读取数据(出于隐私考虑)。但是,Unity WebGL需要从其缓冲区读取数据。让两者在同一WebGLRenderingContext上运行会导致Unity的读取操作出错,这意味着它们需要分开。其想法是定期将Unity的帧缓冲区数据叠加到WebXR的帧缓冲区上


如果需要,也支持WebGL2。

您不能跨上下文共享资源

最好是通过某种方法将一个用作源,然后通过
texImage2D

例如,如果上下文使用画布,则将帧缓冲区绘制到画布,然后

destContext.texImage2D(......., srcContext.canvas);
如果是一个
OffscreenRenderingContext
使用
transferToImageBitmap
,然后将生成的位图传递到
texImage2D