From c1bc1ed571f4929d60b1b111ce67df3b55cc6e7f Mon Sep 17 00:00:00 2001 From: chongw Date: Thu, 11 Sep 2025 17:30:03 +0800 Subject: [PATCH 1/3] fix offscreencanvas support --- src/lib/libbrowser.js | 2 ++ src/lib/libhtml5.js | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/libbrowser.js b/src/lib/libbrowser.js index 6d60a4bd9ad55..fbe6db8be0b70 100644 --- a/src/lib/libbrowser.js +++ b/src/lib/libbrowser.js @@ -712,7 +712,9 @@ var LibraryBrowser = { styleSheet.insertRule('canvas.emscripten { border: 1px solid black; cursor: none; }', 0); }, +#if !OFFSCREENCANVAS_SUPPORT emscripten_set_canvas_size__proxy: 'sync', +#endif emscripten_set_canvas_size: (width, height) => Browser.setCanvasSize(width, height), emscripten_get_canvas_size__proxy: 'sync', diff --git a/src/lib/libhtml5.js b/src/lib/libhtml5.js index 7b07ed3d9eab9..60395981647b1 100644 --- a/src/lib/libhtml5.js +++ b/src/lib/libhtml5.js @@ -360,8 +360,9 @@ var LibraryHTML5 = { // it will move in the GL.offscreenCanvases array between threads. Hence GL.offscreenCanvases // represents the set of OffscreenCanvases owned by the current calling thread. + return specialHTMLTargets[target] // First check out the list of OffscreenCanvases by CSS selector ID ('#myCanvasID') - return GL.offscreenCanvases[target.slice(1)] // Remove '#' prefix + || GL.offscreenCanvases[target.slice(1)] // Remove '#' prefix // If not found, if one is querying by using DOM tag name selector 'canvas', grab the first // OffscreenCanvas that we can find. || (target == 'canvas' && Object.keys(GL.offscreenCanvases)[0]) From 2fc7c20e11c332ef48d251f5e74706d0b70e7bab Mon Sep 17 00:00:00 2001 From: chongw Date: Fri, 12 Sep 2025 23:39:48 +0800 Subject: [PATCH 2/3] remove emscripten_set_canvas_size change, switch priority of specialHtmlTargets --- src/lib/libbrowser.js | 2 -- src/lib/libhtml5.js | 5 +++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/lib/libbrowser.js b/src/lib/libbrowser.js index fbe6db8be0b70..6d60a4bd9ad55 100644 --- a/src/lib/libbrowser.js +++ b/src/lib/libbrowser.js @@ -712,9 +712,7 @@ var LibraryBrowser = { styleSheet.insertRule('canvas.emscripten { border: 1px solid black; cursor: none; }', 0); }, -#if !OFFSCREENCANVAS_SUPPORT emscripten_set_canvas_size__proxy: 'sync', -#endif emscripten_set_canvas_size: (width, height) => Browser.setCanvasSize(width, height), emscripten_get_canvas_size__proxy: 'sync', diff --git a/src/lib/libhtml5.js b/src/lib/libhtml5.js index 60395981647b1..6d935ccab0fb2 100644 --- a/src/lib/libhtml5.js +++ b/src/lib/libhtml5.js @@ -360,12 +360,13 @@ var LibraryHTML5 = { // it will move in the GL.offscreenCanvases array between threads. Hence GL.offscreenCanvases // represents the set of OffscreenCanvases owned by the current calling thread. - return specialHTMLTargets[target] // First check out the list of OffscreenCanvases by CSS selector ID ('#myCanvasID') - || GL.offscreenCanvases[target.slice(1)] // Remove '#' prefix + return GL.offscreenCanvases[target.slice(1)] // Remove '#' prefix // If not found, if one is querying by using DOM tag name selector 'canvas', grab the first // OffscreenCanvas that we can find. || (target == 'canvas' && Object.keys(GL.offscreenCanvases)[0]) + // If not found, check specialHTMLTargets + || specialHTMLTargets[target] // If that is not found either, query via the regular DOM selector. #if PTHREADS || (typeof document != 'undefined' && document.querySelector(target)); From a51b33f74df8f172d034eb021d8ad71e20a37363 Mon Sep 17 00:00:00 2001 From: chongw Date: Mon, 15 Sep 2025 09:59:21 +0800 Subject: [PATCH 3/3] add findCanvasEventTarget deps --- src/lib/libhtml5.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/libhtml5.js b/src/lib/libhtml5.js index 6d935ccab0fb2..0d02978560534 100644 --- a/src/lib/libhtml5.js +++ b/src/lib/libhtml5.js @@ -346,7 +346,7 @@ var LibraryHTML5 = { }, #if OFFSCREENCANVAS_SUPPORT - $findCanvasEventTarget__deps: ['$GL', '$maybeCStringToJsString'], + $findCanvasEventTarget__deps: ['$GL', '$maybeCStringToJsString', '$specialHTMLTargets'], $findCanvasEventTarget: (target) => { target = maybeCStringToJsString(target);