diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/library_browser.js | 7 | ||||
-rw-r--r-- | src/library_gl.js | 63 | ||||
-rw-r--r-- | src/library_sdl.js | 5 |
3 files changed, 39 insertions, 36 deletions
diff --git a/src/library_browser.js b/src/library_browser.js index b2ec0869..ca4524a7 100644 --- a/src/library_browser.js +++ b/src/library_browser.js @@ -5,8 +5,9 @@ mergeInto(LibraryManager.library, { $Browser: { pointerLock: false, + moduleContextCreatedCallbacks: [], - createContext: function(canvas, useWebGL) { + createContext: function(canvas, useWebGL, setInModule) { #if !USE_TYPED_ARRAYS if (useWebGL) { Module.print('(USE_TYPED_ARRAYS needs to be enabled for WebGL)'); @@ -63,6 +64,10 @@ mergeInto(LibraryManager.library, { // Set the background of the WebGL canvas to black canvas.style.backgroundColor = "black"; } + if (setInModule) { + Module.ctx = ctx; + Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() }); + } return ctx; }, diff --git a/src/library_gl.js b/src/library_gl.js index 763eb46f..7f596aef 100644 --- a/src/library_gl.js +++ b/src/library_gl.js @@ -1182,6 +1182,7 @@ var LibraryGL = { // GL Immediate mode + $GLImmediate__postset: 'Browser.moduleContextCreatedCallbacks.push(function() { GL.immediate.init() });', $GLImmediate: { // Vertex and index data maxElements: 10240, @@ -1196,24 +1197,10 @@ var LibraryGL = { rendererComponents: {}, // The following data structures are used for OpenGL Immediate Mode matrix routines. - matrix: { - 'm': null, // modelview - 'p': null, // projection - 't': null // texture - }, - matrixStack: { - 'm': [], - 'p': [], - 't': [] - }, + matrix: {}, + matrixStack: {}, currentMatrix: 'm', // default is modelview tempMatrix: null, - initMatrixLibrary: function() { - GL.immediate.matrix['m'] = GL.immediate.matrix.lib.mat4.create(); - GL.immediate.matrix['p'] = GL.immediate.matrix.lib.mat4.create(); - GL.immediate.matrix['t'] = GL.immediate.matrix.lib.mat4.create(); - GL.immediate.currentMatrix = GL.immediate.matrix.lib.mat4.create(); - }, // Clientside attributes VERTEX: 0, @@ -1227,18 +1214,7 @@ var LibraryGL = { TEXTURE5: 8, TEXTURE6: 9, NUM_ATTRIBUTES: 10, - ATTRIBUTE_BY_NAME: { - 'V': 0, - 'N': 1, - 'C': 2, - 'T0': 3, - 'T1': 4, - 'T2': 5, - 'T3': 6, - 'T4': 7, - 'T5': 8, - 'T6': 9 - }, + ATTRIBUTE_BY_NAME: {}, totalEnabledClientAttributes: 0, enabledClientAttributes: [0, 0], @@ -1424,6 +1400,33 @@ var LibraryGL = { Module.printErr('WARNING: using emscripten GL immediate mode emulation. This is very limited in what it supports'); GL.immediate.initted = true; + // No JSON notation for these objects, for closure w/js optimizer + this.matrix['m'] = null; // modelview + this.matrix['p'] = null; // projection + this.matrix['t'] = null; // texture + + this.matrixStack['m'] = []; + this.matrixStack['p'] = []; + this.matrixStack['t'] = []; + + this.ATTRIBUTE_BY_NAME['V'] = 0; + this.ATTRIBUTE_BY_NAME['N'] = 1; + this.ATTRIBUTE_BY_NAME['C'] = 2; + this.ATTRIBUTE_BY_NAME['T0'] = 3; + this.ATTRIBUTE_BY_NAME['T1'] = 4; + this.ATTRIBUTE_BY_NAME['T2'] = 5; + this.ATTRIBUTE_BY_NAME['T3'] = 6; + this.ATTRIBUTE_BY_NAME['T4'] = 7; + this.ATTRIBUTE_BY_NAME['T5'] = 8; + this.ATTRIBUTE_BY_NAME['T6'] = 9; + + // Initialize matrix library + + GL.immediate.matrix['m'] = GL.immediate.matrix.lib.mat4.create(); + GL.immediate.matrix['p'] = GL.immediate.matrix.lib.mat4.create(); + GL.immediate.matrix['t'] = GL.immediate.matrix.lib.mat4.create(); + GL.immediate.currentMatrix = GL.immediate.matrix.lib.mat4.create(); + // Buffers for data this.tempData = new Float32Array(this.maxElements); this.indexData = new Uint16Array(this.maxElements); @@ -1589,12 +1592,11 @@ var LibraryGL = { } }, - $GLImmediateSetup__deps: ['$GLImmediate', function() { return 'GL.immediate = GLImmediate; GL.immediate.matrix.lib = ' + read('gl-matrix.js') + '; GL.immediate.initMatrixLibrary();\n' }], + $GLImmediateSetup__deps: ['$GLImmediate', function() { return 'GL.immediate = GLImmediate; GL.immediate.matrix.lib = ' + read('gl-matrix.js') + ';\n' }], $GLImmediateSetup: {}, glBegin__deps: ['$GLImmediateSetup'], glBegin: function(mode) { - if (!GL.immediate.initted) GL.immediate.init(); GL.immediate.mode = mode; GL.immediate.renderer = ''; GL.immediate.rendererComponents = {}; @@ -1671,7 +1673,6 @@ var LibraryGL = { // ClientState/gl*Pointer glEnableClientState: function(cap, disable) { - if (!GL.immediate.initted) GL.immediate.init(); switch(cap) { case 0x8078: // GL_TEXTURE_COORD_ARRAY GL.immediate.enabledClientAttributes[GL.immediate.TEXTURE0] = !disable; break; diff --git a/src/library_sdl.js b/src/library_sdl.js index 7a1619ff..22d810ac 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -257,10 +257,7 @@ var LibrarySDL = { } else { canvas = Module['canvas']; } - var ctx = Browser.createContext(canvas, useWebGL); - if (usePageCanvas) { - Module.ctx = ctx; - } + var ctx = Browser.createContext(canvas, useWebGL, usePageCanvas); SDL.surfaces[surf] = { width: width, height: height, |