@@ -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 !"); | |||||
} |