| @@ -73,10 +73,12 @@ canvas.emscripten | |||||
| { | { | ||||
| this.text = Array.prototype.slice.call(arguments).join(' '); | this.text = Array.prototype.slice.call(arguments).join(' '); | ||||
| // These replacements are necessary if you render to raw HTML | // These replacements are necessary if you render to raw HTML | ||||
| //text = text.replace(/&/g, "&"); | |||||
| //text = text.replace(/</g, "<"); | |||||
| //text = text.replace(/>/g, ">"); | |||||
| //text = text.replace('\n', '<br>', 'g'); | |||||
| /* | |||||
| text = text.replace(/&/g, "&"); | |||||
| text = text.replace(/</g, "<"); | |||||
| text = text.replace(/ >/g, ">"); | |||||
| text = text.replace('\n', '<br>', 'g'); | |||||
| */ | |||||
| this.output.value += text + "\n"; | this.output.value += text + "\n"; | ||||
| this.output.scrollTop = 99999; // focus on bottom | this.output.scrollTop = 99999; // focus on bottom | ||||
| }; | }; | ||||
| @@ -153,26 +155,31 @@ canvas.emscripten | |||||
| this.wrapup_list[i].args); | this.wrapup_list[i].args); | ||||
| } | } | ||||
| }, | }, | ||||
| //Module <-> Page communication setup | |||||
| SendMessage:function(message) | SendMessage:function(message) | ||||
| { | { | ||||
| this.DoSendMessage(0, message); | this.DoSendMessage(0, message); | ||||
| }, | |||||
| ModuleSendMessage:function(message) | |||||
| { | |||||
| alert(message); | |||||
| } | } | ||||
| }; | }; | ||||
| Module.setStatus('Please wait, calculating load balance ...', 0, 1); | |||||
| //Module <-> Page communication setup | |||||
| var cur_obj = (parent) ? (parent) : (this); | |||||
| cur_obj.g_embed_module = Module; | |||||
| cur_obj.SendMessageToModule = function() { this.g_embed_module.SendMessage(this.GetTextAreaCodeSrc().value); }; | |||||
| cur_obj.ModuleSentMessage = function(message) { /* */ }; | |||||
| </script> | </script> | ||||
| <!-- Copy this HTML in your site folder and put your built program script in the src. --> | <!-- Copy this HTML in your site folder and put your built program script in the src. --> | ||||
| <!-- <script src="./my_program_script.js"></script> --> | <!-- <script src="./my_program_script.js"></script> --> | ||||
| <!-- --> | <!-- --> | ||||
| <script> | |||||
| //This call NEEDS TO BE after the .js include, because "cwrap" is set in it. | |||||
| <script type='text/javascript'> | |||||
| Module.do_wrapup(); | Module.do_wrapup(); | ||||
| //Parent communication datas | |||||
| function GetDivEmbed() { return document.getElementById('id_div_embed_data'); } | |||||
| function GetEmbedModule() { return Module; } | |||||
| parent.InitModuleVar(); | |||||
| Module.setStatus('Please wait, calculating load balance ...', 0, 1); | |||||
| </script> | </script> | ||||
| </body> | </body> | ||||
| @@ -61,7 +61,7 @@ meshviewer_SOURCES = meshviewer.cpp \ | |||||
| shinymvtexture.lolfx shinyfur.lolfx | shinymvtexture.lolfx shinyfur.lolfx | ||||
| meshviewer_CPPFLAGS = $(AM_CPPFLAGS) | meshviewer_CPPFLAGS = $(AM_CPPFLAGS) | ||||
| meshviewer_DEPENDENCIES = @LOL_DEPS@ | meshviewer_DEPENDENCIES = @LOL_DEPS@ | ||||
| meshviewer_LDFLAGS = $(AM_LDFLAGS) | |||||
| meshviewer_LDFLAGS = $(AM_LDFLAGS) -s | |||||
| if USE_EMSCRIPTEN | if USE_EMSCRIPTEN | ||||
| meshviewer_LDFLAGS += -s EXPORTED_FUNCTIONS="['_main', '_C_Send']" | meshviewer_LDFLAGS += -s EXPORTED_FUNCTIONS="['_main', '_C_Send']" | ||||
| endif | endif | ||||
| @@ -231,7 +231,7 @@ public: | |||||
| vec2 rot = (!is_pos && !is_fov)?(tmp):(vec2(.0f)); rot = vec2(rot.x, rot.y); | vec2 rot = (!is_pos && !is_fov)?(tmp):(vec2(.0f)); rot = vec2(rot.x, rot.y); | ||||
| vec2 pos = (is_pos && !is_fov)?(tmp):(vec2(.0f)); pos = -vec2(pos.y, pos.x); | vec2 pos = (is_pos && !is_fov)?(tmp):(vec2(.0f)); pos = -vec2(pos.y, pos.x); | ||||
| vec2 fov = (!is_pos && is_fov)?(tmp):(vec2(.0f)); fov = vec2(-fov.x, fov.y); | vec2 fov = (!is_pos && is_fov)?(tmp):(vec2(.0f)); fov = vec2(-fov.x, fov.y); | ||||
| vec2 hsc = vec2(0.f); | |||||
| vec2 hsc = (is_hsc)?(vec2(0.f)):(vec2(0.f)); | |||||
| //speed | //speed | ||||
| m_rot_speed = damp(m_rot_speed, rot * ROT_SPEED, .2f, seconds); | m_rot_speed = damp(m_rot_speed, rot * ROT_SPEED, .2f, seconds); | ||||
| @@ -102,9 +102,9 @@ progress::-webkit-progress-value | |||||
| g_var_progress_bar = -1; | g_var_progress_bar = -1; | ||||
| g_frame_embed = null; | g_frame_embed = null; | ||||
| //This is the module pointer : can be either the NaCl or Em one depending on the context. | //This is the module pointer : can be either the NaCl or Em one depending on the context. | ||||
| g_embed_module = null; | |||||
| g_embed_module = null; | |||||
| function machinchose() { return 'test machin '; } | |||||
| function GetTextAreaCodeSrc() { return g_txtarea_code_src; } | function GetTextAreaCodeSrc() { return g_txtarea_code_src; } | ||||
| function GetDivProgress() { return g_div_progress; } | function GetDivProgress() { return g_div_progress; } | ||||
| function GetProgressBar() { return g_progress_bar; } | function GetProgressBar() { return g_progress_bar; } | ||||
| @@ -112,10 +112,11 @@ progress::-webkit-progress-value | |||||
| function GetDivEmbedData() { return g_div_frame_embed; } | function GetDivEmbedData() { return g_div_frame_embed; } | ||||
| function GetDivEmbedDataSave() { return g_div_frame_embed_save; } | function GetDivEmbedDataSave() { return g_div_frame_embed_save; } | ||||
| function GetFrameData() { return g_frame_embed; } | function GetFrameData() { return g_frame_embed; } | ||||
| function GetiFrameDivEmbed() { return g_frame_embed.contentDocument.getElementById('id_div_embed_data'); } | |||||
| //NaCl Specific | |||||
| function GetiFrameModuleVar() { return g_frame_embed.contentDocument.getElementById('id_embed_nacl_module'); } | |||||
| //Communication with iframe content. | |||||
| function InitModuleVar() { g_embed_module = GetiFrameModuleVar(); } | |||||
| function GetiFrameDivEmbed() { return (!g_frame_embed) ? (null) : (g_frame_embed.contentWindow.GetDivEmbed()); } | |||||
| function GetiFrameModuleVar() { return (!g_frame_embed) ? (null) : (g_frame_embed.contentWindow.GetEmbedModule()); } | |||||
| function IsUsingNaCl() { return window.chrome; } | function IsUsingNaCl() { return window.chrome; } | ||||
| </script> | </script> | ||||
| @@ -203,6 +204,21 @@ progress::-webkit-progress-value | |||||
| var div_vars = g_div_helper_vars; | var div_vars = g_div_helper_vars; | ||||
| CmdLookup(div_cmds, div_args, div_cmnt, div_vars, text_src); | CmdLookup(div_cmds, div_args, div_cmnt, div_vars, text_src); | ||||
| } | } | ||||
| //Handle message from the NaCl module | |||||
| function ModuleSentMessage(message) | |||||
| { | |||||
| alert('Module sent message: ' + message.data); | |||||
| } | |||||
| //Called by the "Send Mesh Command !" button | |||||
| function SendMessageToModule() | |||||
| { | |||||
| if (g_embed_module) | |||||
| g_embed_module.SendMessage(GetTextAreaCodeSrc().value); | |||||
| else | |||||
| alert("Module not loaded !"); | |||||
| } | |||||
| </script> | </script> | ||||
| <body> | <body> | ||||
| @@ -1,6 +1,12 @@ | |||||
| <DOCTYPE html> | <DOCTYPE html> | ||||
| <html> | <html> | ||||
| <body> | <body> | ||||
| <script type="text/javascript"> | |||||
| function GetDivEmbed() { return document.getElementById('id_div_embed_data'); } | |||||
| function GetEmbedModule() { return document.getElementById('id_embed_nacl_module'); } | |||||
| if (parent.IsUsingNaCl()) parent.NaClLoadingInit(); | |||||
| </script> | |||||
| <div id="id_div_embed_data" style="left:0px;top:0px;position:absolute;"> | <div id="id_div_embed_data" style="left:0px;top:0px;position:absolute;"> | ||||
| <embed name="name_embed_nacl_module" id="id_embed_nacl_module" width=770 height=200 src="meshviewer_nacl.nmf" type="application/x-nacl" /> | <embed name="name_embed_nacl_module" id="id_embed_nacl_module" width=770 height=200 src="meshviewer_nacl.nmf" type="application/x-nacl" /> | ||||
| </div> | </div> | ||||
| @@ -1,25 +1,28 @@ | |||||
| if (IsUsingNaCl()) NaClLoadingInit(); | |||||
| function InitNaClModuleVar() { g_embed_module = GetiFrameModuleVar(); } | |||||
| function RegisterListener() | function RegisterListener() | ||||
| { | { | ||||
| //Register all the correct functions to the listener | //Register all the correct functions to the listener | ||||
| var div_listener = GetiFrameDivEmbed(); | var div_listener = GetiFrameDivEmbed(); | ||||
| if (div_listener) | if (div_listener) | ||||
| { | { | ||||
| div_listener.addEventListener('loadstart', ModuleStartedLoad, true); | |||||
| div_listener.addEventListener('load', ModuleDidLoad, true); | |||||
| div_listener.addEventListener('error', ModuleError, true); | |||||
| div_listener.addEventListener('progress', ModuleLoadUpdate, true); | |||||
| div_listener.addEventListener('message', ModuleSentMessage, true); | |||||
| div_listener.addEventListener('crash', ModuleCrash, true); | |||||
| div_listener.addEventListener('loadstart', NaClModuleStartedLoad, true); | |||||
| div_listener.addEventListener('load', NaClModuleDidLoad, true); | |||||
| div_listener.addEventListener('error', NaClModuleError, true); | |||||
| div_listener.addEventListener('progress', NaClModuleLoadUpdate, true); | |||||
| div_listener.addEventListener('message', NaClModuleSentMessage, true); | |||||
| div_listener.addEventListener('crash', NaClModuleCrash, true); | |||||
| window.setTimeout("UpdateTextStatus(0.1)", 100); | window.setTimeout("UpdateTextStatus(0.1)", 100); | ||||
| } | } | ||||
| else if (IsUsingNaCl()) | else if (IsUsingNaCl()) | ||||
| window.setTimeout("RegisterListener()", 200); | window.setTimeout("RegisterListener()", 200); | ||||
| } | } | ||||
| function NaClInitModuleVar() | |||||
| { | |||||
| InitModuleVar(); | |||||
| if (g_embed_module) | |||||
| g_embed_module['SendMessage'] = function(message) { g_embed_module.postMessage(message); } | |||||
| } | |||||
| //------------------------------------------------------------------------- | //------------------------------------------------------------------------- | ||||
| // MODULE LOADING FUNCTIONS | // MODULE LOADING FUNCTIONS | ||||
| //------------------------------------------------------------------------- | //------------------------------------------------------------------------- | ||||
| @@ -34,14 +37,14 @@ function NaClLoadingInit() | |||||
| } | } | ||||
| //Module starts load | //Module starts load | ||||
| function ModuleStartedLoad() | |||||
| function NaClModuleStartedLoad() | |||||
| { | { | ||||
| AddTextStatus('Module Started Loading'); | AddTextStatus('Module Started Loading'); | ||||
| InitNaClModuleVar(); | |||||
| NaClInitModuleVar(); | |||||
| } | } | ||||
| //Module progress event | //Module progress event | ||||
| function ModuleLoadUpdate(event) | |||||
| function NaClModuleLoadUpdate(event) | |||||
| { | { | ||||
| if (event.lengthComputable) | if (event.lengthComputable) | ||||
| UpdateProgressBarValue('Please wait, loading', event.loaded, event.total); | UpdateProgressBarValue('Please wait, loading', event.loaded, event.total); | ||||
| @@ -50,10 +53,10 @@ function ModuleLoadUpdate(event) | |||||
| } | } | ||||
| //Indicate module load success. | //Indicate module load success. | ||||
| function ModuleDidLoad() | |||||
| function NaClModuleDidLoad() | |||||
| { | { | ||||
| if (!g_embed_module) | if (!g_embed_module) | ||||
| InitNaClModuleVar(); | |||||
| NaClInitModuleVar(); | |||||
| //Hide the progress div | //Hide the progress div | ||||
| AddTextStatus('Module is live, thank you for your patience.'); | AddTextStatus('Module is live, thank you for your patience.'); | ||||
| @@ -61,21 +64,21 @@ function ModuleDidLoad() | |||||
| } | } | ||||
| //Module did crash | //Module did crash | ||||
| function ModuleCrash(event) | |||||
| function NaClModuleCrash(event) | |||||
| { | { | ||||
| RestartModule(); | |||||
| NaClRestartModule(); | |||||
| AddTextStatus("Module has crashed ! Restarting ..."); | AddTextStatus("Module has crashed ! Restarting ..."); | ||||
| } | } | ||||
| //Module had an error | //Module had an error | ||||
| function ModuleError(event) | |||||
| function NaClModuleError(event) | |||||
| { | { | ||||
| RestartModule(); | |||||
| NaClRestartModule(); | |||||
| AddTextStatus("Module Load/start Error ! Restarting ..."); | AddTextStatus("Module Load/start Error ! Restarting ..."); | ||||
| } | } | ||||
| //Used to restart module on crash/error/load fail .... | //Used to restart module on crash/error/load fail .... | ||||
| function RestartModule() | |||||
| function NaClRestartModule() | |||||
| { | { | ||||
| var id_frame_embed = GetFrameData(); | var id_frame_embed = GetFrameData(); | ||||
| if (id_frame_embed) | if (id_frame_embed) | ||||
| @@ -90,16 +93,8 @@ function RestartModule() | |||||
| //------------------------------------------------------------------------- | //------------------------------------------------------------------------- | ||||
| //Handle message from the NaCl module | //Handle message from the NaCl module | ||||
| function ModuleSentMessage(message) | |||||
| function NaClModuleSentMessage(message) | |||||
| { | { | ||||
| alert('Module sent message: ' + message.data); | |||||
| ModuleSentMessage(message); | |||||
| } | } | ||||
| //Called by the "Send Mesh Command !" button | |||||
| function SendMessageToModule() | |||||
| { | |||||
| if (g_embed_module) | |||||
| g_embed_module.postMessage(GetTextAreaCodeSrc().value); | |||||
| else | |||||
| alert("Module not loaded !"); | |||||
| } | |||||