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(' ');
// 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.scrollTop = 99999; // focus on bottom
};
@@ -153,26 +155,31 @@ canvas.emscripten
this.wrapup_list[i].args);
}
},
//Module <-> Page communication setup
SendMessage:function(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>

<!-- Copy this HTML in your site folder and put your built program script in the src. -->
<!-- <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();

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

</body>


+ 1
- 1
test/Makefile.am View File

@@ -61,7 +61,7 @@ meshviewer_SOURCES = meshviewer.cpp \
shinymvtexture.lolfx shinyfur.lolfx
meshviewer_CPPFLAGS = $(AM_CPPFLAGS)
meshviewer_DEPENDENCIES = @LOL_DEPS@
meshviewer_LDFLAGS = $(AM_LDFLAGS)
meshviewer_LDFLAGS = $(AM_LDFLAGS) -s
if USE_EMSCRIPTEN
meshviewer_LDFLAGS += -s EXPORTED_FUNCTIONS="['_main', '_C_Send']"
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 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 hsc = vec2(0.f);
vec2 hsc = (is_hsc)?(vec2(0.f)):(vec2(0.f));

//speed
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_frame_embed = null;
//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 GetDivProgress() { return g_div_progress; }
function GetProgressBar() { return g_progress_bar; }
@@ -112,10 +112,11 @@ progress::-webkit-progress-value
function GetDivEmbedData() { return g_div_frame_embed; }
function GetDivEmbedDataSave() { return g_div_frame_embed_save; }
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; }
</script>

@@ -203,6 +204,21 @@ progress::-webkit-progress-value
var div_vars = g_div_helper_vars;
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>

<body>


+ 6
- 0
test/meshviewer_nacl.html View File

@@ -1,6 +1,12 @@
<DOCTYPE html>
<html>
<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;">
<embed name="name_embed_nacl_module" id="id_embed_nacl_module" width=770 height=200 src="meshviewer_nacl.nmf" type="application/x-nacl" />
</div>


+ 25
- 30
test/nacl_loading.js View File

@@ -1,25 +1,28 @@
if (IsUsingNaCl()) NaClLoadingInit();

function InitNaClModuleVar() { g_embed_module = GetiFrameModuleVar(); }

function RegisterListener()
{
//Register all the correct functions to the listener
var div_listener = GetiFrameDivEmbed();
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);
}
else if (IsUsingNaCl())
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
//-------------------------------------------------------------------------
@@ -34,14 +37,14 @@ function NaClLoadingInit()
}

//Module starts load
function ModuleStartedLoad()
function NaClModuleStartedLoad()
{
AddTextStatus('Module Started Loading');
InitNaClModuleVar();
NaClInitModuleVar();
}

//Module progress event
function ModuleLoadUpdate(event)
function NaClModuleLoadUpdate(event)
{
if (event.lengthComputable)
UpdateProgressBarValue('Please wait, loading', event.loaded, event.total);
@@ -50,10 +53,10 @@ function ModuleLoadUpdate(event)
}

//Indicate module load success.
function ModuleDidLoad()
function NaClModuleDidLoad()
{
if (!g_embed_module)
InitNaClModuleVar();
NaClInitModuleVar();

//Hide the progress div
AddTextStatus('Module is live, thank you for your patience.');
@@ -61,21 +64,21 @@ function ModuleDidLoad()
}

//Module did crash
function ModuleCrash(event)
function NaClModuleCrash(event)
{
RestartModule();
NaClRestartModule();
AddTextStatus("Module has crashed ! Restarting ...");
}

//Module had an error
function ModuleError(event)
function NaClModuleError(event)
{
RestartModule();
NaClRestartModule();
AddTextStatus("Module Load/start Error ! Restarting ...");
}

//Used to restart module on crash/error/load fail ....
function RestartModule()
function NaClRestartModule()
{
var id_frame_embed = GetFrameData();
if (id_frame_embed)
@@ -90,16 +93,8 @@ function RestartModule()
//-------------------------------------------------------------------------

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