The "Module object should not be replaced during async compilation" error
surprises me, and I don't see it when I try the testcase, so not sure
what's going on there. But in the HTML, Module.canvas should be the actual
canvas, which I see is in the solution link, and not a function returning
the canvas. So instead of of

Module = { canvas: function () {} }

it should be

Module = { canvas: the_actual_canvas }

or the actual canvas could be a JS function that is executed immediately,
like (function() { .. return canvas })(), which is what is the default HTML
(which might look a little confusing).


On Wed, Aug 29, 2018 at 6:50 PM Andrew <[email protected]> wrote:

> I posted the solution here on stackoverflow,
>
> https://stackoverflow.com/questions/52077995/basic-setup-for-glfw-causes-a-runtime-error-with-regards-to-eventlistener-in-ems
>  if anyone wants to explain why the solution is slightly different from
> the question feel free to.
>
> On Wednesday, August 29, 2018 at 12:07:17 AM UTC-5, Andrew wrote:
>>
>> Hello everyone,
>>
>> To make a long story short I tried to create the simplest possible setup
>> for a an opengl c++ demo and the problem I have seems to be related to the
>> the initialization of the canvas with regards to the eventlistener that
>> is found in the javascript wrapper for the wasm file. I'm new to this so
>> I'll just post
>> the code in cpp, the html file, and the command line used to compile the
>> project plus the error in chromium.
>>
>> This is the glfw.cpp
>>
>> #include <emscripten/emscripten.h>
>> #include <emscripten/bind.h>
>> using namespace emscripten;
>>
>> #define GLFW_INCLUDE_ES3
>>
>> #include <GLFW/glfw3.h>
>> #include <GLES3/gl3.h>
>>
>>
>> void initialize()
>> {
>>  // Initialise GLFW
>> if( !glfwInit() )
>> {
>> EM_ASM_({
>>   console.log(' failed: ');
>> }, 0);
>> }
>>
>> EM_ASM_({
>>   console.log(' end initialization: ');
>> }, 0);
>> }
>> EMSCRIPTEN_BINDINGS(glfw)
>> {
>>     function("initialize", &initialize);
>> }
>>
>>
>> This is the glfw.html
>>
>> <!doctype html>
>> <html>
>> <head>
>> </head>
>> <body>
>> <canvas id="canvas" oncontextmenu="event.preventDefault()" style =
>> "height: 100%; width: 100%; background-color:red;"></canvas>
>> <script>
>> var Module =
>> {
>> canvas: function()
>> {
>> console.log("canvas");
>> var canvas = document.getElementById('canvas');
>> canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL
>> context lost. You will need to reload the page.'); e.preventDefault(); },
>> false);
>>
>> return canvas;
>> },
>> onRuntimeInitialized: function()
>> {
>> Module.initialize();
>> }
>> };
>> </script>
>> <script type="text/javascript" src="glfw.js"> </script>
>> </body>
>> </html>
>>
>>
>> the command to compile the project
>>
>> emcc --bind -o glfw.js glfw.cpp -s USE_GLFW=3
>>
>> and this is the complete error from the console.log in chromium
>>
>> glfw.js:1645 Fetch finished loading: GET "http://localhost:8080/glfw.wasm
>> ".
>> doNativeWasm @ glfw.js:1645
>> Module.asm @ glfw.js:1735
>> (anonymous) @ glfw.js:4813
>> glfw.js:1650 wasm streaming compile failed: TypeError:
>> Module.canvas.addEventListener is not a function
>> (anonymous) @ glfw.js:1650
>> Promise.catch (async)
>> doNativeWasm @ glfw.js:1647
>> Module.asm @ glfw.js:1735
>> (anonymous) @ glfw.js:4813
>> glfw.js:1651 falling back to ArrayBuffer instantiation
>> (anonymous) @ glfw.js:1651
>> Promise.catch (async)
>> doNativeWasm @ glfw.js:1647
>> Module.asm @ glfw.js:1735
>> (anonymous) @ glfw.js:4813
>> glfw.js:1560 Fetch finished loading: GET "http://localhost:8080/glfw.wasm
>> ".
>> getBinaryPromise @ glfw.js:1560
>> instantiateArrayBuffer @ glfw.js:1633
>> (anonymous) @ glfw.js:1652
>> Promise.catch (async)
>> doNativeWasm @ glfw.js:1647
>> Module.asm @ glfw.js:1735
>> (anonymous) @ glfw.js:4813
>> glfw.js:5228 Assertion failed: the Module object should not be replaced
>> during async compilation - perhaps the order of HTML elements is wrong?
>> glfw.js:5229 Assertion failed: the Module object should not be replaced
>> during async compilation - perhaps the order of HTML elements is wrong?
>> abort @ glfw.js:5229
>> assert @ glfw.js:434
>> receiveInstantiatedSource @ glfw.js:1628
>> Promise.then (async)
>> instantiateArrayBuffer @ glfw.js:1635
>> (anonymous) @ glfw.js:1652
>> Promise.catch (async)
>> doNativeWasm @ glfw.js:1647
>> Module.asm @ glfw.js:1735
>> (anonymous) @ glfw.js:4813
>> glfw.js:1636 failed to asynchronously prepare wasm: abort("Assertion
>> failed: the Module object should not be replaced during async compilation -
>> perhaps the order of HTML elements is wrong?") at Error
>>     at jsStackTrace (http://localhost:8080/glfw.js:1033:13)
>>     at stackTrace (http://localhost:8080/glfw.js:1050:12)
>>     at abort (http://localhost:8080/glfw.js:5239:44)
>>     at assert (http://localhost:8080/glfw.js:434:5)
>>     at receiveInstantiatedSource (http://localhost:8080/glfw.js:1628:7)
>> (anonymous) @ glfw.js:1636
>> Promise.catch (async)
>> instantiateArrayBuffer @ glfw.js:1635
>> (anonymous) @ glfw.js:1652
>> Promise.catch (async)
>> doNativeWasm @ glfw.js:1647
>> Module.asm @ glfw.js:1735
>> (anonymous) @ glfw.js:4813
>> glfw.js:5228 abort("Assertion failed: the Module object should not be
>> replaced during async compilation - perhaps the order of HTML elements is
>> wrong?") at Error
>>     at jsStackTrace (http://localhost:8080/glfw.js:1033:13)
>>     at stackTrace (http://localhost:8080/glfw.js:1050:12)
>>     at abort (http://localhost:8080/glfw.js:5239:44)
>>     at assert (http://localhost:8080/glfw.js:434:5)
>>     at receiveInstantiatedSource (http://localhost:8080/glfw.js:1628:7)
>> glfw.js:5229 abort("Assertion failed: the Module object should not be
>> replaced during async compilation - perhaps the order of HTML elements is
>> wrong?") at Error
>>     at jsStackTrace (http://localhost:8080/glfw.js:1033:13)
>>     at stackTrace (http://localhost:8080/glfw.js:1050:12)
>>     at abort (http://localhost:8080/glfw.js:5239:44)
>>     at assert (http://localhost:8080/glfw.js:434:5)
>>     at receiveInstantiatedSource (http://localhost:8080/glfw.js:1628:7)
>> abort @ glfw.js:5229
>> (anonymous) @ glfw.js:1637
>> Promise.catch (async)
>> instantiateArrayBuffer @ glfw.js:1635
>> (anonymous) @ glfw.js:1652
>> Promise.catch (async)
>> doNativeWasm @ glfw.js:1647
>> Module.asm @ glfw.js:1735
>> (anonymous) @ glfw.js:4813
>> glfw.html:1 Uncaught (in promise) abort("abort(\"Assertion failed: the
>> Module object should not be replaced during async compilation - perhaps the
>> order of HTML elements is wrong?\") at Error\n    at jsStackTrace (
>> http://localhost:8080/glfw.js:1033:13)\n    at stackTrace (
>> http://localhost:8080/glfw.js:1050:12)\n    at abort (
>> http://localhost:8080/glfw.js:5239:44)\n    at assert (
>> http://localhost:8080/glfw.js:434:5)\n    at receiveInstantiatedSource (
>> http://localhost:8080/glfw.js:1628:7)") at Error
>>     at jsStackTrace (http://localhost:8080/glfw.js:1033:13)
>>     at stackTrace (http://localhost:8080/glfw.js:1050:12)
>>     at abort (http://localhost:8080/glfw.js:5239:44)
>>     at http://localhost:8080/glfw.js:1637:9
>>
>>
>> --
> You received this message because you are subscribed to the Google Groups
> "emscripten-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to