Skip to content

Commit 0d43060

Browse files
committed
[wasm64] Fix emscripten_get_preloaded_image_data
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 c06a2b0 commit 0d43060

File tree

2 files changed

+21
-14
lines changed

2 files changed

+21
-14
lines changed

.circleci/config.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -819,6 +819,7 @@ jobs:
819819
browser_2gb.test_cubegeom*
820820
browser_2gb.test_html5_webgl_create_context*
821821
browser_2gb.test_main_thread_async_em_asm
822+
browser_2gb.test_sdl_image
822823
"
823824
test-browser-chrome-wasm64-4gb:
824825
executor: bionic
@@ -835,6 +836,7 @@ jobs:
835836
browser64_4gb.test_emscripten_animate_canvas_element_size_manual_css
836837
browser64_4gb.test_fulles2_sdlproc
837838
browser64_4gb.test_html5_webgl_create_context*
839+
browser64_4gb.test_sdl_image
838840
"
839841
test-browser-firefox:
840842
executor: bionic

src/library_browser.js

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1291,37 +1291,42 @@ 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'],
12951295
emscripten_get_preloaded_image_data__proxy: 'sync',
12961296
emscripten_get_preloaded_image_data: (path, w, h) => {
1297-
if ((path | 0) === path) path = UTF8ToString(path);
1297+
#if ASSERTIONS
1298+
assert(path);
1299+
#endif
1300+
return getPreloadedImageData(UTF8ToString(path), w, h);
1301+
},
12981302

1303+
$getPreloadedImageData__internal: true,
1304+
$getPreloadedImageData__data: ['$PATH_FS', 'malloc'],
1305+
$getPreloadedImageData: (path, w, h) => {
12991306
path = PATH_FS.resolve(path);
13001307

13011308
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);
1309+
if (!canvas) return 0;
13061310

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

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

1314-
return 0;
1317+
{{{ makeSetValue('w', '0', 'canvas.width', 'i32') }}};
1318+
{{{ makeSetValue('h', '0', 'canvas.height', 'i32') }}};
1319+
return buf;
13151320
},
13161321

13171322
#if !WASMFS // WasmFS implements this in wasm
1318-
emscripten_get_preloaded_image_data_from_FILE__deps: ['emscripten_get_preloaded_image_data', 'fileno'],
1323+
emscripten_get_preloaded_image_data_from_FILE__deps: ['$getPreloadedImageData', 'fileno'],
13191324
emscripten_get_preloaded_image_data_from_FILE__proxy: 'sync',
13201325
emscripten_get_preloaded_image_data_from_FILE: (file, w, h) => {
13211326
var fd = _fileno(file);
13221327
var stream = FS.getStream(fd);
13231328
if (stream) {
1324-
return _emscripten_get_preloaded_image_data(stream.path, w, h);
1329+
return getPreloadedImageData(stream.path, w, h);
13251330
}
13261331

13271332
return 0;

0 commit comments

Comments
 (0)