Skip to content

Commit b67eb49

Browse files
authored
[wasm64] Fix emscripten_get_preloaded_image_data (#21308)
Here we extract an inner JS function that take a JS string so that the externally facing once can assume its being passed a pointer.
1 parent 7a5d1d8 commit b67eb49

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed

.circleci/config.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,7 @@ jobs:
821821
browser_2gb.test_main_thread_async_em_asm
822822
browser_2gb.test_webgl2_*
823823
browser_2gb.test_webgl_*
824+
browser_2gb.test_sdl_image
824825
"
825826
test-browser-chrome-wasm64-4gb:
826827
executor: bionic
@@ -837,6 +838,7 @@ jobs:
837838
browser64_4gb.test_emscripten_animate_canvas_element_size_manual_css
838839
browser64_4gb.test_fulles2_sdlproc
839840
browser64_4gb.test_html5_webgl_create_context*
841+
browser64_4gb.test_sdl_image
840842
"
841843
test-browser-firefox:
842844
executor: bionic

src/library_browser.js

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1291,37 +1291,37 @@ var LibraryBrowser = {
12911291
return info.awaited;
12921292
},
12931293

1294-
emscripten_get_preloaded_image_data__deps: ['$PATH_FS', 'malloc'],
1294+
emscripten_get_preloaded_image_data__deps: ['$getPreloadedImageData', '$UTF8ToString'],
12951295
emscripten_get_preloaded_image_data__proxy: 'sync',
1296-
emscripten_get_preloaded_image_data: (path, w, h) => {
1297-
if ((path | 0) === path) path = UTF8ToString(path);
1296+
emscripten_get_preloaded_image_data: (path, w, h) => getPreloadedImageData(UTF8ToString(path), w, h),
12981297

1298+
$getPreloadedImageData__internal: true,
1299+
$getPreloadedImageData__data: ['$PATH_FS', 'malloc'],
1300+
$getPreloadedImageData: (path, w, h) => {
12991301
path = PATH_FS.resolve(path);
13001302

13011303
var canvas = /** @type {HTMLCanvasElement} */(preloadedImages[path]);
1302-
if (canvas) {
1303-
var ctx = canvas.getContext("2d");
1304-
var image = ctx.getImageData(0, 0, canvas.width, canvas.height);
1305-
var buf = _malloc(canvas.width * canvas.height * 4);
1304+
if (!canvas) return 0;
13061305

1307-
HEAPU8.set(image.data, buf);
1306+
var ctx = canvas.getContext("2d");
1307+
var image = ctx.getImageData(0, 0, canvas.width, canvas.height);
1308+
var buf = _malloc(canvas.width * canvas.height * 4);
13081309

1309-
{{{ makeSetValue('w', '0', 'canvas.width', 'i32') }}};
1310-
{{{ makeSetValue('h', '0', 'canvas.height', 'i32') }}};
1311-
return buf;
1312-
}
1310+
HEAPU8.set(image.data, buf);
13131311

1314-
return 0;
1312+
{{{ makeSetValue('w', '0', 'canvas.width', 'i32') }}};
1313+
{{{ makeSetValue('h', '0', 'canvas.height', 'i32') }}};
1314+
return buf;
13151315
},
13161316

13171317
#if !WASMFS // WasmFS implements this in wasm
1318-
emscripten_get_preloaded_image_data_from_FILE__deps: ['emscripten_get_preloaded_image_data', 'fileno'],
1318+
emscripten_get_preloaded_image_data_from_FILE__deps: ['$getPreloadedImageData', 'fileno'],
13191319
emscripten_get_preloaded_image_data_from_FILE__proxy: 'sync',
13201320
emscripten_get_preloaded_image_data_from_FILE: (file, w, h) => {
13211321
var fd = _fileno(file);
13221322
var stream = FS.getStream(fd);
13231323
if (stream) {
1324-
return _emscripten_get_preloaded_image_data(stream.path, w, h);
1324+
return getPreloadedImageData(stream.path, w, h);
13251325
}
13261326

13271327
return 0;

0 commit comments

Comments
 (0)