diff options
author | Behdad Esfahbod <behdad@behdad.org> | 2012-03-27 22:10:39 -0400 |
---|---|---|
committer | Behdad Esfahbod <behdad@behdad.org> | 2012-03-27 22:25:20 -0400 |
commit | c086bddf9252c9ad4b4d685256af651600be8d52 (patch) | |
tree | db9d5a9146c7a0f938fa62c5e1797fd6378c5c50 /src | |
parent | 80bc58af4cf2717fed6fd2aabd627c69c016e988 (diff) |
Better handle GLUT frame request handling
Diffstat (limited to 'src')
-rw-r--r-- | src/library_gl.js | 64 |
1 files changed, 37 insertions, 27 deletions
diff --git a/src/library_gl.js b/src/library_gl.js index 9fa1cd66..1c54abd9 100644 --- a/src/library_gl.js +++ b/src/library_gl.js @@ -432,7 +432,7 @@ var LibraryGL = { var LibraryGLUT = { $GLUT: { initTime: null, - idleFunc: null, + displayFunc: null, keyboardFunc: null, keyboardUpFunc: null, specialFunc: null, @@ -554,32 +554,16 @@ var LibraryGLUT = { } }, - glutDisplayFunc: function(func) { - var RAF = window['setTimeout']; - if (window['requestAnimationFrame']) { - RAF = window['requestAnimationFrame']; - } else if (window['mozRequestAnimationFrame']) { - RAF = window['mozRequestAnimationFrame']; - } else if (window['webkitRequestAnimationFrame']) { - RAF = window['webkitRequestAnimationFrame']; - } else if (window['msRequestAnimationFrame']) { - RAF = window['msRequestAnimationFrame']; - } - RAF.apply(window, [function() { - if (GLUT.reshapeFunc) { - FUNCTION_TABLE[GLUT.reshapeFunc](Module['canvas'].width, - Module['canvas'].height); - } - if (GLUT.idleFunc) { - FUNCTION_TABLE[GLUT.idleFunc](); - } - FUNCTION_TABLE[func](); - _glutDisplayFunc(func); - }]); + glutIdleFunc: function(func) { + window.setTimeout(FUNCTION_TABLE[func], 0); }, - glutIdleFunc: function(func) { - GLUT.idleFunc = func; + glutTimerFunc: function(msec, func, value) { + window.setTimeout(function() { FUNCTION_TABLE[func](value); }, msec); + }, + + glutDisplayFunc: function(func) { + GLUT.displayFunc = func; }, glutKeyboardFunc: function(func) { @@ -632,9 +616,35 @@ var LibraryGLUT = { }, glutInitDisplayMode: function(mode) {}, - glutMainLoop: function() {}, glutSwapBuffers: function() {}, - glutPostRedisplay: function() {}, + + getRAF: function() { + var RAF = window['setTimeout']; + if (window['requestAnimationFrame']) { + RAF = window['requestAnimationFrame']; + } else if (window['mozRequestAnimationFrame']) { + RAF = window['mozRequestAnimationFrame']; + } else if (window['webkitRequestAnimationFrame']) { + RAF = window['webkitRequestAnimationFrame']; + } else if (window['msRequestAnimationFrame']) { + RAF = window['msRequestAnimationFrame']; + } + return RAF; + }, + + glutPostRedisplay: function() { + if (GLUT.displayFunc) + GLUT.getRAF().apply(window, [FUNCTION_TABLE[GLUT.displayFunc]]); + }, + + glutMainLoop: function() { + if (GLUT.reshapeFunc) { + FUNCTION_TABLE[GLUT.reshapeFunc](Module['canvas'].width, + Module['canvas'].height); + } + GLUT.glutPostRedisplay(); + }, + }; mergeInto(LibraryManager.library, LibraryGL); |