我将在网络工作者中做一些工作,这样我就不能在 DOM 树上有画布元素。但是,
emscripten_webgl_create_context
api 需要一个附加到 DOM 树中的画布的 id。我知道我可以通过 document.createElement('canvas')
创建一个画布对象,然后将该画布传输到屏幕外。但是,我怎样才能将这个屏幕外画布上下文传递给 wasm?
简而言之,如何在工作线程中使用 emscripten 创建
WebGL2RenderingContext
的 OffScreenCanvas
?
我想我找到了一个解决方案,但它需要深入研究 emscripten 生成的代码的内部结构:
EM_JS( intptr_t, createOffscreenContext, ( int width, int height ), {
const offscreenCanvas = new OffscreenCanvas( width, height );
const contextAttributes = {
majorVersion: 2,
minorVersion: 0,
explicitSwapControl: false,
proxyContextToMainThread: false,
};
const contextHandle = GL.createContext( offscreenCanvas, contextAttributes );
return contextHandle;
} );
我在深入研究 Emscripten 生成的 js 文件并看到
emscripten_webgl_create_context()
最终只是调用 GL.createContext()
后想到了这个。