wasm: use emscripten::val for specialHTMLTargets
We need to add specialHTMLTargets to EXPORTED_RUNTIME_METHODS in order to use it, as Emscripten does not export it. Also, EM_ASM is not allowed for SIDE_MODULES, so it's better to use emscripten::val methods. Change-Id: I9b352ac98e2a961157f5bb36456bec3e35891270 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
This commit is contained in:
parent
830b1550de
commit
0ec75f4b99
@ -3,7 +3,7 @@ function (qt_internal_setup_wasm_target_properties wasmTarget)
|
||||
|
||||
target_link_options("${wasmTarget}" INTERFACE
|
||||
"SHELL:-s ERROR_ON_UNDEFINED_SYMBOLS=1"
|
||||
"SHELL:-s EXPORTED_RUNTIME_METHODS=[UTF16ToString,stringToUTF16]"
|
||||
"SHELL:-s EXPORTED_RUNTIME_METHODS=[UTF16ToString,stringToUTF16,specialHTMLTargets]"
|
||||
"SHELL:-s USE_WEBGL2=1"
|
||||
"--bind"
|
||||
"SHELL:-s FETCH=1")
|
||||
|
@ -104,9 +104,10 @@ QWasmScreen::QWasmScreen(const emscripten::val &containerOrCanvas)
|
||||
// apps/ages only, since Emscripten uses the main document to look up the element.
|
||||
// As a workaround for this, Emscripten supports registering custom mappings in the
|
||||
// "specialHTMLTargets" object. Add a mapping for the canvas for this screen.
|
||||
EM_ASM({
|
||||
specialHTMLTargets["!qtcanvas_" + $0] = Emval.toValue($1);
|
||||
}, uint32_t(this), m_canvas.as_handle());
|
||||
emscripten::val specialHtmlTargets = emscripten::val::module_property("specialHTMLTargets");
|
||||
|
||||
std::string id = std::string("!qtcanvas_") + std::to_string(uint32_t(this));
|
||||
specialHtmlTargets.set(id, m_canvas.as_handle());
|
||||
|
||||
// Install event handlers on the container/canvas. This must be
|
||||
// done after the canvas has been created above.
|
||||
@ -118,9 +119,10 @@ QWasmScreen::QWasmScreen(const emscripten::val &containerOrCanvas)
|
||||
|
||||
QWasmScreen::~QWasmScreen()
|
||||
{
|
||||
EM_ASM({
|
||||
specialHTMLTargets["!qtcanvas_" + $0] = undefined;
|
||||
}, uint32_t(this));
|
||||
emscripten::val specialHtmlTargets = emscripten::val::module_property("specialHTMLTargets");
|
||||
|
||||
std::string id = std::string("!qtcanvas_") + std::to_string(uint32_t(this));
|
||||
specialHtmlTargets.set(id, emscripten::val::undefined());
|
||||
|
||||
m_canvas.set(m_canvasResizeObserverCallbackContextPropertyName, emscripten::val(intptr_t(0)));
|
||||
destroy();
|
||||
|
Loading…
Reference in New Issue
Block a user