Пожалуйста, обратитесь к разделу фона ниже, если следующее не имеет особого смысла, я пропустил большую часть контекста, чтобы сделать проблему как можно более ясной.
У меня есть дваWebGLRenderingContexts со следующими чертами:
- WebGLRenderingContext: InputGL (разрешает операции чтения и записи для своих кадровых буферов.)
- WebGLRenderingContext: OutputGL (Позволяет только записывать операций на свои кадровые буферы.)
GOAL : накладывать рендеринг InputGL на рендеринг OutputGL периодически в течение 33 мс (30 кадр / с) на мобильном телефоне.
Кадровые буферы InputGL и OutputGL извлекаются из отдельных процессов.Оба доступны (и с полными кадровыми буферами) в пределах одного обратного вызова window.requestAnimationFrame.Поскольку InputGL требует операций чтения, а OutputGL поддерживает только операции записи, InputGL и OutputGL не могут быть объединены в один WebGLRenderingContext.
Поэтому я хотел бы копировать содержимое кадрового буфера из InputGL в OutputGL в каждом обратном вызове window.requestAnimationFrame.Это позволяет мне поддерживать чтение / запись на 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 в сочетании с невыпущенным WebXR API .WebXR использует свой собственный модифицированный WebGLRenderingContext, который запрещает чтение из своих буферов (из соображений конфиденциальности).Однако Unity WebGL требует чтения из своих буферов.То, что оба работают на одном и том же WebGLRenderingContext, приводит к ошибкам в операциях чтения Unity, что означает, что их необходимо хранить отдельно.Идея состоит в том, чтобы периодически накладывать данные кадрового буфера Unity на кадровые буферы WebXR.
WebGL2 также поддерживается в случае необходимости.