diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/library_glfw.js | 644 |
1 files changed, 327 insertions, 317 deletions
diff --git a/src/library_glfw.js b/src/library_glfw.js index e197efd2..fc051ce6 100644 --- a/src/library_glfw.js +++ b/src/library_glfw.js @@ -1,6 +1,6 @@ /******************************************************************************* * EMSCRIPTEN GLFW 2.7.7 emulation. - * It tries to emulate the behavior described in + * It tries to emulate the behavior described in * http://www.glfw.org/GLFWReference277.pdf * * What it does: @@ -23,17 +23,17 @@ var LibraryGLFW = { $GLFW: { - + keyFunc: null, - charFunc: null, - mouseButtonFunc: null, - mousePosFunc: null, - mouseWheelFunc: null, + charFunc: null, + mouseButtonFunc: null, + mousePosFunc: null, + mouseWheelFunc: null, resizeFunc: null, - closeFunc: null, - refreshFunc: null, + closeFunc: null, + refreshFunc: null, mouseFunc: null, - params: null, + params: null, initTime: null, wheelPos: 0, lastX: 0, @@ -86,7 +86,7 @@ var LibraryGLFW = { case 0x06 : return 288 ; //DOM_VK_RIGHT_SHIFT -> GLFW_KEY_RSHIFT case 17 : return 289 ; //DOM_VK_CONTROL -> GLFW_KEY_LCTRL case 0x03 : return 289 ; //DOM_VK_LEFT_CONTROL -> GLFW_KEY_LCTRL - case 0x04 : return 290 ; //DOM_VK_RIGHT_CONTROL -> GLFW_KEY_RCTRL + case 0x04 : return 290 ; //DOM_VK_RIGHT_CONTROL -> GLFW_KEY_RCTRL case 18 : return 291 ; //DOM_VK_ALT -> GLFW_KEY_LALT case 0x02 : return 291 ; //DOM_VK_LEFT_ALT -> GLFW_KEY_LALT case 0x01 : return 292 ; //DOM_VK_RIGHT_ALT -> GLFW_KEY_RALT @@ -113,14 +113,14 @@ var LibraryGLFW = { value = 0xDC00 | value & 0x3FF; } output += String.fromCharCode(value); - return output; + return output; }, onKeyPress: function(event) { //charCode is only available whith onKeyPress event var char = GLFW.getUnicodeChar(event.charCode); - - if(event.charCode){ + + if(event.charCode) { var char = GLFW.getUnicodeChar(event.charCode); if( char !== null && GLFW.charFunc ) { event.preventDefault(); @@ -128,24 +128,24 @@ var LibraryGLFW = { } } }, - - onKeyChanged: function(event, status){ - var key = GLFW.DOMToGLFWKeyCode(event.keyCode); + + onKeyChanged: function(event, status) { + var key = GLFW.DOMToGLFWKeyCode(event.keyCode); if(key && GLFW.keyFunc) { GLFW.keys[key] = status; event.preventDefault(); Runtime.dynCall('vii', GLFW.keyFunc, [key, status]); - } + } }, onKeydown: function(event) { - GLFW.onKeyChanged(event, 1);//GLFW_PRESS + GLFW.onKeyChanged(event, 1);//GLFW_PRESS }, onKeyup: function(event) { - GLFW.onKeyChanged(event, 0);//GLFW_RELEASE + GLFW.onKeyChanged(event, 0);//GLFW_RELEASE }, - + savePosition: function(event) { /* TODO maybe loop here ala http://www.quirksmode.org/js/findpos.html */ GLFW.lastX = event['clientX'] - Module['canvas'].offsetLeft; @@ -159,53 +159,59 @@ var LibraryGLFW = { */ var newX = event['clientX'] - Module['canvas'].offsetLeft; var newY = event['clientY'] - Module['canvas'].offsetTop; - if (newX == GLFW.lastX && newY == GLFW.lastY) + if (newX == GLFW.lastX && newY == GLFW.lastY) { return; + } GLFW.savePosition(event); - + if (event.target == Module["canvas"] && GLFW.mousePosFunc) { event.preventDefault(); Runtime.dynCall('vii', GLFW.mousePosFunc, [GLFW.lastX, GLFW.lastY]); - } + } }, - onMouseButtonChanged: function(event, status){ - if(GLFW.mouseButtonFunc == null) + onMouseButtonChanged: function(event, status) { + if(GLFW.mouseButtonFunc == null) { return; + } GLFW.savePosition(event); - if(event.target != Module["canvas"]) + if(event.target != Module["canvas"]) { return; - - if(status == 1){//GLFW_PRESS + } + + if(status == 1) {//GLFW_PRESS try { event.target.setCapture(); } catch (e) {} } event.preventDefault(); - //DOM and glfw have the same button codes + //DOM and glfw have the same button codes Runtime.dynCall('vii', GLFW.mouseButtonFunc, [event['button'], status]); - }, + }, - onMouseButtonDown: function(event){ + onMouseButtonDown: function(event) { GLFW.buttons |= (1 << event['button']); - GLFW.onMouseButtonChanged(event, 1);//GLFW_PRESS - }, + GLFW.onMouseButtonChanged(event, 1);//GLFW_PRESS + }, - onMouseButtonUp: function(event){ - GLFW.buttons &= ~(1 << event['button']); - GLFW.onMouseButtonChanged(event, 0);//GLFW_RELEASE - }, + onMouseButtonUp: function(event) { + GLFW.buttons &= ~(1 << event['button']); + GLFW.onMouseButtonChanged(event, 0);//GLFW_RELEASE + }, - onMouseWheel: function(event){ - if(event.detail > 0) + onMouseWheel: function(event) { + if(event.detail > 0) { GLFW.wheelPos++; - if(event.detail < 0) + } + + if(event.detail < 0) { GLFW.wheelPos--; - - if(GLFW.mouseWheelFunc && event.target == Module["canvas"]){ + } + + if(GLFW.mouseWheelFunc && event.target == Module["canvas"]) { Runtime.dynCall('vi', GLFW.mouseWheelFunc, [GLFW.wheelPos]); event.preventDefault(); } @@ -213,23 +219,24 @@ var LibraryGLFW = { // TODO add fullscreen API ala: // http://johndyer.name/native-fullscreen-javascript-api-plus-jquery-plugin/ - onFullScreenEventChange: function(event){ + onFullScreenEventChange: function(event) { var width; var height; if (document["fullScreen"] || document["mozFullScreen"] || document["webkitIsFullScreen"]) { width = screen["width"]; height = screen["height"]; - } else { + } + else { width = GLFW.windowWidth; height = GLFW.windowHeight; - // TODO set position + // TODO set position document.removeEventListener('fullscreenchange', GLFW.onFullScreenEventChange, true); document.removeEventListener('mozfullscreenchange', GLFW.onFullScreenEventChange, true); document.removeEventListener('webkitfullscreenchange', GLFW.onFullScreenEventChange, true); } Browser.setCanvasSize(width, height); - - if (GLFW.resizeFunc){ + + if (GLFW.resizeFunc) { Runtime.dynCall('vii', GLFW.resizeFunc, [width, height]); } }, @@ -248,7 +255,7 @@ var LibraryGLFW = { document['cancelFullScreen'] || document['mozCancelFullScreen'] || document['webkitCancelFullScreen'] || - (function() {}); + (function() {}); CFS.apply(document, []); } }, @@ -257,50 +264,50 @@ var LibraryGLFW = { * GLFW FUNCTIONS ******************************************************************************/ - /* GLFW initialization, termination and version querying */ - glfwInit : function() { - GLFW.initTime = Date.now() / 1000; - - window.addEventListener("keydown", GLFW.onKeydown, true); - window.addEventListener("keypress", GLFW.onKeyPress, true); - window.addEventListener("keyup", GLFW.onKeyup, true); - window.addEventListener("mousemove", GLFW.onMousemove, true); - window.addEventListener("mousedown", GLFW.onMouseButtonDown, true); - window.addEventListener("mouseup", GLFW.onMouseButtonUp, true); - window.addEventListener('DOMMouseScroll', GLFW.onMouseWheel, true); + /* GLFW initialization, termination and version querying */ + glfwInit : function() { + GLFW.initTime = Date.now() / 1000; + + window.addEventListener("keydown", GLFW.onKeydown, true); + window.addEventListener("keypress", GLFW.onKeyPress, true); + window.addEventListener("keyup", GLFW.onKeyup, true); + window.addEventListener("mousemove", GLFW.onMousemove, true); + window.addEventListener("mousedown", GLFW.onMouseButtonDown, true); + window.addEventListener("mouseup", GLFW.onMouseButtonUp, true); + window.addEventListener('DOMMouseScroll', GLFW.onMouseWheel, true); window.addEventListener('mousewheel', GLFW.onMouseWheel, true); - __ATEXIT__.push({ func: function() { - window.removeEventListener("keydown", GLFW.onKeydown, true); - window.removeEventListener("keypress", GLFW.onKeyPress, true); - window.removeEventListener("keyup", GLFW.onKeyup, true); - window.removeEventListener("mousemove", GLFW.onMousemove, true); - window.removeEventListener("mousedown", GLFW.onMouseButtonDown, true); - window.removeEventListener("mouseup", GLFW.onMouseButtonUp, true); - window.removeEventListener('DOMMouseScroll', GLFW.onMouseWheel, true); + __ATEXIT__.push({ func: function() { + window.removeEventListener("keydown", GLFW.onKeydown, true); + window.removeEventListener("keypress", GLFW.onKeyPress, true); + window.removeEventListener("keyup", GLFW.onKeyup, true); + window.removeEventListener("mousemove", GLFW.onMousemove, true); + window.removeEventListener("mousedown", GLFW.onMouseButtonDown, true); + window.removeEventListener("mouseup", GLFW.onMouseButtonUp, true); + window.removeEventListener('DOMMouseScroll', GLFW.onMouseWheel, true); window.removeEventListener('mousewheel', GLFW.onMouseWheel, true); - Module["canvas"].width = Module["canvas"].height = 1; - } }); + Module["canvas"].width = Module["canvas"].height = 1; + } }); //TODO: Init with correct values - GLFW.params = new Array(); - GLFW.params[0x00030001] = true; //GLFW_MOUSE_CURSOR - GLFW.params[0x00030002] = false; //GLFW_STICKY_KEYS - GLFW.params[0x00030003] = true; //GLFW_STICKY_MOUSE_BUTTONS - GLFW.params[0x00030004] = false; //GLFW_SYSTEM_KEYS - GLFW.params[0x00030005] = false; //GLFW_KEY_REPEAT - GLFW.params[0x00030006] = true; //GLFW_AUTO_POLL_EVENTS - GLFW.params[0x00020001] = true; //GLFW_OPENED + GLFW.params = new Array(); + GLFW.params[0x00030001] = true; //GLFW_MOUSE_CURSOR + GLFW.params[0x00030002] = false; //GLFW_STICKY_KEYS + GLFW.params[0x00030003] = true; //GLFW_STICKY_MOUSE_BUTTONS + GLFW.params[0x00030004] = false; //GLFW_SYSTEM_KEYS + GLFW.params[0x00030005] = false; //GLFW_KEY_REPEAT + GLFW.params[0x00030006] = true; //GLFW_AUTO_POLL_EVENTS + GLFW.params[0x00020001] = true; //GLFW_OPENED GLFW.params[0x00020002] = true; //GLFW_ACTIVE GLFW.params[0x00020003] = false; //GLFW_ICONIFIED - GLFW.params[0x00020004] = true; //GLFW_ACCELERATED + GLFW.params[0x00020004] = true; //GLFW_ACCELERATED GLFW.params[0x00020005] = 0; //GLFW_RED_BITS - GLFW.params[0x00020006] = 0; //GLFW_GREEN_BITS + GLFW.params[0x00020006] = 0; //GLFW_GREEN_BITS GLFW.params[0x00020007] = 0; //GLFW_BLUE_BITS GLFW.params[0x00020008] = 0; //GLFW_ALPHA_BITS GLFW.params[0x00020009] = 0; //GLFW_DEPTH_BITS GLFW.params[0x0002000A] = 0; //GLFW_STENCIL_BITS - GLFW.params[0x0002000B] = 0; //GLFW_REFRESH_RATE + GLFW.params[0x0002000B] = 0; //GLFW_REFRESH_RATE GLFW.params[0x0002000C] = 0; //GLFW_ACCUM_RED_BITS GLFW.params[0x0002000D] = 0; //GLFW_ACCUM_GREEN_BITS GLFW.params[0x0002000E] = 0; //GLFW_ACCUM_BLUE_BITS @@ -309,265 +316,268 @@ var LibraryGLFW = { GLFW.params[0x00020011] = 0; //GLFW_STEREO GLFW.params[0x00020012] = 0; //GLFW_WINDOW_NO_RESIZE GLFW.params[0x00020013] = 0; //GLFW_FSAA_SAMPLES - GLFW.params[0x00020014] = 0; //GLFW_OPENGL_VERSION_MAJOR - GLFW.params[0x00020015] = 0; //GLFW_OPENGL_VERSION_MINOR - GLFW.params[0x00020016] = 0; //GLFW_OPENGL_FORWARD_COMPAT - GLFW.params[0x00020017] = 0; //GLFW_OPENGL_DEBUG_CONTEXT + GLFW.params[0x00020014] = 0; //GLFW_OPENGL_VERSION_MAJOR + GLFW.params[0x00020015] = 0; //GLFW_OPENGL_VERSION_MINOR + GLFW.params[0x00020016] = 0; //GLFW_OPENGL_FORWARD_COMPAT + GLFW.params[0x00020017] = 0; //GLFW_OPENGL_DEBUG_CONTEXT GLFW.params[0x00020018] = 0; //GLFW_OPENGL_PROFILE GLFW.keys = new Array(); - return 1; //GL_TRUE - }, - - glfwTerminate : function() {}, + return 1; //GL_TRUE + }, - glfwGetVersion : function( major, minor, rev ) { - setValue(major, 2, 'i32'); - setValue(minor, 7, 'i32'); - setValue(rev, 7, 'i32'); - }, + glfwTerminate : function() {}, - /* Window handling */ - glfwOpenWindow__deps: ['$Browser'], - glfwOpenWindow : function( width, height, redbits, greenbits, bluebits, alphabits, depthbits, stencilbits, mode ) { - if(width == 0 && height > 0) - width = 4 * height / 3; - if(width > 0 && height == 0) - height = 3 * width / 4; + glfwGetVersion : function( major, minor, rev ) { + setValue(major, 2, 'i32'); + setValue(minor, 7, 'i32'); + setValue(rev, 7, 'i32'); + }, + /* Window handling */ + glfwOpenWindow__deps: ['$Browser'], + glfwOpenWindow : function( width, height, redbits, greenbits, bluebits, alphabits, depthbits, stencilbits, mode ) { + if(width == 0 && height > 0) { + width = 4 * height / 3; + } + if(width > 0 && height == 0) { + height = 3 * width / 4; + } GLFW.params[0x00020005] = redbits; //GLFW_RED_BITS - GLFW.params[0x00020006] = greenbits; //GLFW_GREEN_BITS + GLFW.params[0x00020006] = greenbits; //GLFW_GREEN_BITS GLFW.params[0x00020007] = bluebits; //GLFW_BLUE_BITS GLFW.params[0x00020008] = alphabits; //GLFW_ALPHA_BITS GLFW.params[0x00020009] = depthbits; //GLFW_DEPTH_BITS GLFW.params[0x0002000A] = stencilbits; //GLFW_STENCIL_BITS - if(mode == 0x00010001){//GLFW_WINDOW - Browser.setCanvasSize( GLFW.initWindowWidth = width, + if(mode == 0x00010001) {//GLFW_WINDOW + Browser.setCanvasSize( GLFW.initWindowWidth = width, GLFW.initWindowHeight = height ); - GLFW.params[0x00030003] = true; //GLFW_STICKY_MOUSE_BUTTONS - } - else if(mode == 0x00010002){//GLFW_FULLSCREEN - GLFW.requestFullScreen(); - GLFW.params[0x00030003] = false; //GLFW_STICKY_MOUSE_BUTTONS - } - else{ - throw "Invalid glfwOpenWindow mode."; - } - - Module.ctx = Browser.createContext(Module['canvas'], true, true); - return 1; //GL_TRUE - }, - - glfwOpenWindowHint : function( target, hint ) { - GLFW.params[target] = hint; - }, - - glfwCloseWindow__deps: ['$Browser'], - glfwCloseWindow : function() { - if (GLFW.closeFunc) - Runtime.dynCall('v', GLFW.closeFunc, []); - Module.ctx = Browser.destroyContext(Module['canvas'], true, true); - }, - - glfwSetWindowTitle : function( title ) { - document.title = Pointer_stringify(title); - }, - - glfwGetWindowSize : function( width, height ) { - setValue(width, Module['canvas'].width, 'i32'); - setValue(height, Module['canvas'].height, 'i32'); - }, - - glfwSetWindowSize : function( width, height ) { - GLFW.cancelFullScreen(); - Browser.setCanvasSize(width, height); - if (GLFW.resizeFunc) { - Runtime.dynCall('vii', GLFW.resizeFunc, [width, height]); - } - }, - - glfwSetWindowPos : function( x, y ) {}, - - glfwIconifyWindow : function() {}, - - glfwRestoreWindow : function() {}, - - glfwSwapBuffers : function() {}, - - glfwSwapInterval : function( interval ) {}, - - glfwGetWindowParam : function( param ) { - return GLFW.params[param]; - }, - - glfwSetWindowSizeCallback : function( cbfun ) { - GLFW.resizeFunc = cbfun; - }, - - glfwSetWindowCloseCallback : function( cbfun ) { - GLFW.closeFunc = cbfun; - }, - - glfwSetWindowRefreshCallback : function( cbfun ) { - GLFW.refreshFunc = cbfun; - }, - - /* Video mode functions */ - glfwGetVideoModes : function( list, maxcount ) { throw "glfwGetVideoModes is not implemented."; }, - - glfwGetDesktopMode : function( mode ) { throw "glfwGetDesktopMode is not implemented."; }, - - /* Input handling */ - glfwPollEvents : function() {}, - - glfwWaitEvents : function() {}, - - glfwGetKey : function( key ) { - return GLFW.keys[key]; - }, - - glfwGetMouseButton : function( button ) { - return (GLFW.buttons & (1 << button)) > 0; - }, - - glfwGetMousePos : function( xpos, ypos ) { - setValue(xpos, GLFW.lastX, 'i32'); - setValue(ypos, GLFW.lastY, 'i32'); - }, + GLFW.params[0x00030003] = true; //GLFW_STICKY_MOUSE_BUTTONS + } + else if(mode == 0x00010002) {//GLFW_FULLSCREEN + GLFW.requestFullScreen(); + GLFW.params[0x00030003] = false; //GLFW_STICKY_MOUSE_BUTTONS + } + else{ + throw "Invalid glfwOpenWindow mode."; + } + + Module.ctx = Browser.createContext(Module['canvas'], true, true); + return 1; //GL_TRUE + }, + + glfwOpenWindowHint : function( target, hint ) { + GLFW.params[target] = hint; + }, + + glfwCloseWindow__deps: ['$Browser'], + glfwCloseWindow : function() { + if (GLFW.closeFunc) { + Runtime.dynCall('v', GLFW.closeFunc, []); + } + Module.ctx = Browser.destroyContext(Module['canvas'], true, true); + }, + + glfwSetWindowTitle : function( title ) { + document.title = Pointer_stringify(title); + }, + + glfwGetWindowSize : function( width, height ) { + setValue(width, Module['canvas'].width, 'i32'); + setValue(height, Module['canvas'].height, 'i32'); + }, + + glfwSetWindowSize : function( width, height ) { + GLFW.cancelFullScreen(); + Browser.setCanvasSize(width, height); + if (GLFW.resizeFunc) { + Runtime.dynCall('vii', GLFW.resizeFunc, [width, height]); + } + }, + + glfwSetWindowPos : function( x, y ) {}, + + glfwIconifyWindow : function() {}, + + glfwRestoreWindow : function() {}, + + glfwSwapBuffers : function() {}, + + glfwSwapInterval : function( interval ) {}, + + glfwGetWindowParam : function( param ) { + return GLFW.params[param]; + }, + + glfwSetWindowSizeCallback : function( cbfun ) { + GLFW.resizeFunc = cbfun; + }, + + glfwSetWindowCloseCallback : function( cbfun ) { + GLFW.closeFunc = cbfun; + }, + + glfwSetWindowRefreshCallback : function( cbfun ) { + GLFW.refreshFunc = cbfun; + }, + + /* Video mode functions */ + glfwGetVideoModes : function( list, maxcount ) { throw "glfwGetVideoModes is not implemented."; }, + + glfwGetDesktopMode : function( mode ) { throw "glfwGetDesktopMode is not implemented."; }, + + /* Input handling */ + glfwPollEvents : function() {}, + + glfwWaitEvents : function() {}, + + glfwGetKey : function( key ) { + return GLFW.keys[key]; + }, + + glfwGetMouseButton : function( button ) { + return (GLFW.buttons & (1 << button)) > 0; + }, + + glfwGetMousePos : function( xpos, ypos ) { + setValue(xpos, GLFW.lastX, 'i32'); + setValue(ypos, GLFW.lastY, 'i32'); + }, //I believe it is not possible to move the mouse with javascript - glfwSetMousePos : function( xpos, ypos ) {}, - - glfwGetMouseWheel : function() { - return GLFW.wheelPos; - }, - - glfwSetMouseWheel : function( pos ) { - GLFW.wheelPos = pos; - }, - - glfwSetKeyCallback : function( cbfun ) { - GLFW.keyFunc = cbfun; - }, - - glfwSetCharCallback : function( cbfun ) { - GLFW.charFunc = cbfun; - }, - - glfwSetMouseButtonCallback : function( cbfun ) { - GLFW.mouseButtonFunc = cbfun; - }, - - glfwSetMousePosCallback : function( cbfun ) { - GLFW.mousePosFunc = cbfun; - }, - - glfwSetMouseWheelCallback : function( cbfun ) { - GLFW.mouseWheelFunc = cbfun; - }, - - /* Joystick input */ - glfwGetJoystickParam : function( joy, param ) { throw "glfwGetJoystickParam is not implemented."; }, - - glfwGetJoystickPos : function( joy, pos, numaxes ) { throw "glfwGetJoystickPos is not implemented."; }, - - glfwGetJoystickButtons : function( joy, buttons, numbuttons ) { throw "glfwGetJoystickButtons is not implemented."; }, - - /* Time */ - glfwGetTime : function() { - return (Date.now()/1000) - GLFW.initTime; - }, - - glfwSetTime : function( time ) { - GLFW.initTime = Date.now()/1000 + time; - }, + glfwSetMousePos : function( xpos, ypos ) {}, + + glfwGetMouseWheel : function() { + return GLFW.wheelPos; + }, + + glfwSetMouseWheel : function( pos ) { + GLFW.wheelPos = pos; + }, + + glfwSetKeyCallback : function( cbfun ) { + GLFW.keyFunc = cbfun; + }, + + glfwSetCharCallback : function( cbfun ) { + GLFW.charFunc = cbfun; + }, + + glfwSetMouseButtonCallback : function( cbfun ) { + GLFW.mouseButtonFunc = cbfun; + }, + + glfwSetMousePosCallback : function( cbfun ) { + GLFW.mousePosFunc = cbfun; + }, + + glfwSetMouseWheelCallback : function( cbfun ) { + GLFW.mouseWheelFunc = cbfun; + }, + + /* Joystick input */ + glfwGetJoystickParam : function( joy, param ) { throw "glfwGetJoystickParam is not implemented."; }, + + glfwGetJoystickPos : function( joy, pos, numaxes ) { throw "glfwGetJoystickPos is not implemented."; }, + + glfwGetJoystickButtons : function( joy, buttons, numbuttons ) { throw "glfwGetJoystickButtons is not implemented."; }, + + /* Time */ + glfwGetTime : function() { + return (Date.now()/1000) - GLFW.initTime; + }, + + glfwSetTime : function( time ) { + GLFW.initTime = Date.now()/1000 + time; + }, glfwSleep__deps: ['sleep'], - glfwSleep : function( time ) { - _sleep(time); - }, - - /* Extension support */ - glfwExtensionSupported : function( extension ) { - return Module.ctx.getSupportedExtensions().indexOf(Pointer_stringify(extension)) > -1; - }, - - glfwGetProcAddress__deps: ['glfwGetProcAddress'], - glfwGetProcAddress : function( procname ) { - return _getProcAddress(procname); - }, - - glfwGetGLVersion : function( major, minor, rev ) { - setValue(major, 0, 'i32'); - setValue(minor, 0, 'i32'); - setValue(rev, 1, 'i32'); - }, - - /* Threading support */ - glfwCreateThread : function( fun, arg ) { + glfwSleep : function( time ) { + _sleep(time); + }, + + /* Extension support */ + glfwExtensionSupported : function( extension ) { + return Module.ctx.getSupportedExtensions().indexOf(Pointer_stringify(extension)) > -1; + }, + + glfwGetProcAddress__deps: ['glfwGetProcAddress'], + glfwGetProcAddress : function( procname ) { + return _getProcAddress(procname); + }, + + glfwGetGLVersion : function( major, minor, rev ) { + setValue(major, 0, 'i32'); + setValue(minor, 0, 'i32'); + setValue(rev, 1, 'i32'); + }, + + /* Threading support */ + glfwCreateThread : function( fun, arg ) { var str = 'v'; - for(i in arg) + for(i in arg) { str += 'i'; + } Runtime.dynCall(str, fun, arg); //One single thread - return 0; - }, - - glfwDestroyThread : function( ID ) {}, - - glfwWaitThread : function( ID, waitmode ) {}, - - glfwGetThreadID : function() { - //One single thread - return 0; - }, - - glfwCreateMutex : function() { throw "glfwCreateMutex is not implemented."; }, - - glfwDestroyMutex : function( mutex ) { throw "glfwDestroyMutex is not implemented."; }, - - glfwLockMutex : function( mutex ) { throw "glfwLockMutex is not implemented."; }, - - glfwUnlockMutex : function( mutex ) { throw "glfwUnlockMutex is not implemented."; }, - - glfwCreateCond : function() { throw "glfwCreateCond is not implemented."; }, - - glfwDestroyCond : function( cond ) { throw "glfwDestroyCond is not implemented."; }, - - glfwWaitCond : function( cond, mutex, timeout ) { throw "glfwWaitCond is not implemented."; }, - - glfwSignalCond : function( cond ) { throw "glfwSignalCond is not implemented."; }, - - glfwBroadcastCond : function( cond ) { throw "glfwBroadcastCond is not implemented."; }, - - glfwGetNumberOfProcessors : function() { - //Threads are disabled anyway… - return 1; - }, - - /* Enable/disable functions */ - glfwEnable : function( token ) { - GLFW.params[token] = false; - }, - - glfwDisable : function( token ) { - GLFW.params[token] = true; - }, - - /* Image/texture I/O support */ - glfwReadImage : function( name, img, flags ) { throw "glfwReadImage is not implemented."; }, - - glfwReadMemoryImage : function( data, size, img, flags ) { throw "glfwReadMemoryImage is not implemented."; }, - - glfwFreeImage : function( img ) { throw "glfwFreeImage is not implemented."; }, - - glfwLoadTexture2D : function( name, flags ) { throw "glfwLoadTexture2D is not implemented."; }, - - glfwLoadMemoryTexture2D : function( data, size, flags ) { throw "glfwLoadMemoryTexture2D is not implemented."; }, - - glfwLoadTextureImage2D : function( img, flags ) { throw "glfwLoadTextureImage2D is not implemented."; }, + return 0; + }, + + glfwDestroyThread : function( ID ) {}, + + glfwWaitThread : function( ID, waitmode ) {}, + + glfwGetThreadID : function() { + //One single thread + return 0; + }, + + glfwCreateMutex : function() { throw "glfwCreateMutex is not implemented."; }, + + glfwDestroyMutex : function( mutex ) { throw "glfwDestroyMutex is not implemented."; }, + + glfwLockMutex : function( mutex ) { throw "glfwLockMutex is not implemented."; }, + + glfwUnlockMutex : function( mutex ) { throw "glfwUnlockMutex is not implemented."; }, + + glfwCreateCond : function() { throw "glfwCreateCond is not implemented."; }, + + glfwDestroyCond : function( cond ) { throw "glfwDestroyCond is not implemented."; }, + + glfwWaitCond : function( cond, mutex, timeout ) { throw "glfwWaitCond is not implemented."; }, + + glfwSignalCond : function( cond ) { throw "glfwSignalCond is not implemented."; }, + + glfwBroadcastCond : function( cond ) { throw "glfwBroadcastCond is not implemented."; }, + + glfwGetNumberOfProcessors : function() { + //Threads are disabled anyway… + return 1; + }, + + /* Enable/disable functions */ + glfwEnable : function( token ) { + GLFW.params[token] = false; + }, + + glfwDisable : function( token ) { + GLFW.params[token] = true; + }, + + /* Image/texture I/O support */ + glfwReadImage : function( name, img, flags ) { throw "glfwReadImage is not implemented."; }, + + glfwReadMemoryImage : function( data, size, img, flags ) { throw "glfwReadMemoryImage is not implemented."; }, + + glfwFreeImage : function( img ) { throw "glfwFreeImage is not implemented."; }, + + glfwLoadTexture2D : function( name, flags ) { throw "glfwLoadTexture2D is not implemented."; }, + + glfwLoadMemoryTexture2D : function( data, size, flags ) { throw "glfwLoadMemoryTexture2D is not implemented."; }, + + glfwLoadTextureImage2D : function( img, flags ) { throw "glfwLoadTextureImage2D is not implemented."; }, }; autoAddDeps(LibraryGLFW, '$GLFW'); |