I want to create a simple dialog in a browser that takes button click as input using WebAssembly.
I have succeeded creating an application using OpenGL, SDL2, and imGui and ported it to JavaScript using Emscripten. But I have problems passing data from the WebAssembly OpenGL application to JavaScript.
How can I pass data from C++ to Javascript to acknowledge the web page that users have done some actions (ex: Clicking "OK" button)?
I've tried to stop the Emscripten run loop using emscripten_cancel_main_loop. And the application just freezes on the web page.
I'm trying to emit events from C++ to JavaScript but couldn't figure out how it works.
After several attempts, I've come to an approach to dispatch CustomEvent from WebAssembly to my Web page.
The function that was used to send data looks like this:
EM_JS(void, sendData, (int data), {
window.dispatchEvent(
new CustomEvent("fromWASM", {
detail: {
data: data
}
})
);
});
Then call sendData() directly on C++ code as if it was a normal C++ function.
Finally, we'll need to listen to the event on the JavaScript side with addEventListener:
window.addEventListener('fromWASM', (event) => {
console.log(event.detail);
});
I'm also wondering can we pass messages from the web page to the OpenGL application?