Skip to content

Commit ec2daf1

Browse files
committed
Fix to OffscreenCanvasInfo handling
1 parent 0b377b8 commit ec2daf1

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/library_html5.js

+10-5
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ var LibraryJSEvents = {
297297
// TODO: Once Module['canvas'] is removed, clean up the following line:
298298
if (target == '#canvas') offscreenCanvas = GL.offscreenCanvases['canvas'];
299299
if (!offscreenCanvas) offscreenCanvas = GL.offscreenCanvases[target] || (target == 'canvas' && Object.keys(GL.offscreenCanvases)[0]); // First looks up by DOM ID ("#myCanvasElement"), second looks up by DOM element name (first found element of type <canvas>)
300-
if (offscreenCanvas) return offscreenCanvas['offscreenCanvas'];
300+
if (offscreenCanvas) return offscreenCanvas;
301301

302302
#if USE_PTHREADS
303303
return (typeof document !== 'undefined') ? document.querySelector(target) : null;
@@ -338,10 +338,10 @@ var LibraryJSEvents = {
338338
_findCanvasEventTarget: function(target) {
339339
if (typeof target === 'number') target = UTF8ToString(target);
340340
if (!target || target === '#canvas') {
341-
if (typeof GL !== 'undefined' && GL.offscreenCanvases['canvas']) return GL.offscreenCanvases['canvas']['offscreenCanvas']; // TODO: Remove this line, target '#canvas' should refer only to Module['canvas'], not to GL.offscreenCanvases['canvas'] - but need stricter tests to be able to remove this line.
341+
if (typeof GL !== 'undefined' && GL.offscreenCanvases['canvas']) return GL.offscreenCanvases['canvas']; // TODO: Remove this line, target '#canvas' should refer only to Module['canvas'], not to GL.offscreenCanvases['canvas'] - but need stricter tests to be able to remove this line.
342342
return Module['canvas'];
343343
}
344-
if (typeof GL !== 'undefined' && GL.offscreenCanvases[target]) return GL.offscreenCanvases[target]['offscreenCanvas'];
344+
if (typeof GL !== 'undefined' && GL.offscreenCanvases[target]) return GL.offscreenCanvases[target];
345345
return __findEventTarget(target);
346346
},
347347
#endif
@@ -2263,6 +2263,8 @@ var LibraryJSEvents = {
22632263
}
22642264

22652265
#if OFFSCREENCANVAS_SUPPORT
2266+
canvas = canvas.offscreenCanvas;
2267+
22662268
#if GL_DEBUG
22672269
if (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) console.log('emscripten_webgl_create_context: Creating an OffscreenCanvas-based WebGL context on target "' + targetStr + '"');
22682270
else if (typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement) console.log('emscripten_webgl_create_context: Creating an HTMLCanvasElement-based WebGL context on target "' + targetStr + '"');
@@ -2292,9 +2294,12 @@ var LibraryJSEvents = {
22922294
console.log('explicitSwapControl requested: canvas.transferControlToOffscreen() on canvas "' + targetStr + '" to get .commit() function and not rely on implicit WebGL swap');
22932295
#endif
22942296
if (!canvas.controlTransferredOffscreen) {
2295-
GL.offscreenCanvases[canvas.id] = canvas.transferControlToOffscreen();
2297+
GL.offscreenCanvases[canvas.id] = {
2298+
canvas: canvas.transferControlToOffscreen(),
2299+
canvasSharedPtr: _malloc(12),
2300+
id: canvas.id
2301+
};
22962302
canvas.controlTransferredOffscreen = true;
2297-
GL.offscreenCanvases[canvas.id].id = canvas.id;
22982303
} else if (!GL.offscreenCanvases[canvas.id]) {
22992304
#if GL_DEBUG
23002305
console.error('OffscreenCanvas is supported, and canvas "' + canvas.id + '" has already before been transferred offscreen, but there is no known OffscreenCanvas with that name!');

0 commit comments

Comments
 (0)