aboutsummaryrefslogtreecommitdiff
path: root/src/library_browser.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/library_browser.js')
-rw-r--r--src/library_browser.js38
1 files changed, 25 insertions, 13 deletions
diff --git a/src/library_browser.js b/src/library_browser.js
index 1102acbe..07641aed 100644
--- a/src/library_browser.js
+++ b/src/library_browser.js
@@ -5,6 +5,10 @@
mergeInto(LibraryManager.library, {
$Browser__postset: 'Module["requestFullScreen"] = function() { Browser.requestFullScreen() };\n', // export requestFullScreen
$Browser: {
+ mainLoop: {
+ scheduler: null,
+ paused: false
+ },
pointerLock: false,
moduleContextCreatedCallbacks: [],
@@ -148,28 +152,36 @@ mergeInto(LibraryManager.library, {
emscripten_set_main_loop: function(func, fps) {
Module['noExitRuntime'] = true;
- _emscripten_set_main_loop.cancel = false;
var jsFunc = FUNCTION_TABLE[func];
-
+ var wrapper = function() {
+ if (Browser.mainLoop.paused) return;
+ jsFunc();
+ Browser.mainLoop.scheduler();
+ }
if (fps && fps > 0) {
- function doOne() {
- if (_emscripten_set_main_loop.cancel) return;
- jsFunc();
- setTimeout(doOne, 1000/fps); // doing this each time means that on exception, we stop
+ Browser.mainLoop.scheduler = function() {
+ setTimeout(wrapper, 1000/fps); // doing this each time means that on exception, we stop
}
- setTimeout(doOne, 1000/fps);
} else {
- function doOneRAF() {
- if (_emscripten_set_main_loop.cancel) return;
- jsFunc();
- Browser.requestAnimationFrame(doOneRAF);
+ Browser.mainLoop.scheduler = function() {
+ Browser.requestAnimationFrame(wrapper);
}
- Browser.requestAnimationFrame(doOneRAF);
}
+ Browser.mainLoop.scheduler();
},
emscripten_cancel_main_loop: function(func) {
- _emscripten_set_main_loop.cancel = true;
+ Browser.mainLoop.scheduler = null;
+ Browser.mainLoop.paused = true;
+ },
+
+ emscripten_pause_main_loop: function(func) {
+ Browser.mainLoop.paused = true;
+ },
+
+ emscripten_resume_main_loop: function(func) {
+ Browser.mainLoop.paused = false;
+ Browser.mainLoop.scheduler();
},
emscripten_async_call: function(func, millis) {