Browse Source

Fixed MViewer emscripten version and also simplified some interaction stuff.

undefined
Benjamin ‘Touky’ Huet Sam Hocevar <sam@hocevar.net> 11 years ago
parent
commit
16872731eb
6 changed files with 73 additions and 49 deletions
  1. +19
    -12
      src/platform/emscripten/lol_shell.html
  2. +1
    -1
      test/Makefile.am
  3. +1
    -1
      test/meshviewer.cpp
  4. +21
    -5
      test/meshviewer_index.html
  5. +6
    -0
      test/meshviewer_nacl.html
  6. +25
    -30
      test/nacl_loading.js

+ 19
- 12
src/platform/emscripten/lol_shell.html View File

@@ -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, "&amp;");
//text = text.replace(/</g, "&lt;");
//text = text.replace(/>/g, "&gt;");
//text = text.replace('\n', '<br>', 'g');
/*
text = text.replace(/&/g, "&amp;");
text = text.replace(/</g, "&lt;");
text = text.replace(/ >/g, "&gt;");
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>


+ 1
- 1
test/Makefile.am View File

@@ -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


+ 1
- 1
test/meshviewer.cpp View File

@@ -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);


+ 21
- 5
test/meshviewer_index.html View File

@@ -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>


+ 6
- 0
test/meshviewer_nacl.html View File

@@ -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>


+ 25
- 30
test/nacl_loading.js View File

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

Loading…
Cancel
Save