diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-05-05 18:05:42 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-05-05 18:05:42 -0700 |
commit | 642819024e8bef56119d37a34394bf85397d777c (patch) | |
tree | 2b19918faeb5508cbb220d788b4a88cec113e9aa | |
parent | d24edd5719c6156fc3223cf4cd4e4e2b9fc3a171 (diff) |
refactor gl code for closure compiler, and add more testing
-rw-r--r-- | src/library_browser.js | 7 | ||||
-rw-r--r-- | src/library_gl.js | 63 | ||||
-rw-r--r-- | src/library_sdl.js | 5 | ||||
-rwxr-xr-x | tests/runner.py | 4 | ||||
-rw-r--r-- | tests/sdl_ogl.c | 1 |
5 files changed, 42 insertions, 38 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, diff --git a/tests/runner.py b/tests/runner.py index 8ce18a34..01ae704e 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -7132,10 +7132,10 @@ elif 'browser' in str(sys.argv): self.run_browser('something.html', '.', '/report_result?1') def test_sdl_ogl(self): - # SDL, OpenGL, textures, immediate mode + # SDL, OpenGL, textures, immediate mode. Closure for more coverage shutil.copyfile(path_from_root('tests', 'screenshot.png'), os.path.join(self.get_dir(), 'screenshot.png')) self.reftest(path_from_root('tests', 'screenshot-gray-purple.png')) - Popen(['python', EMCC, path_from_root('tests', 'sdl_ogl.c'), '-o', 'something.html', '--pre-js', 'reftest.js', '--preload-file', 'screenshot.png']).communicate() + Popen(['python', EMCC, path_from_root('tests', 'sdl_ogl.c'), '-O2', '--minify', '0', '-o', 'something.html', '--pre-js', 'reftest.js', '--preload-file', 'screenshot.png']).communicate() self.run_browser('something.html', 'You should see an image with gray at the top.', '/report_result?0') def test_sdl_ogl_p(self): diff --git a/tests/sdl_ogl.c b/tests/sdl_ogl.c index 2165ed64..570a0e10 100644 --- a/tests/sdl_ogl.c +++ b/tests/sdl_ogl.c @@ -58,6 +58,7 @@ int main(int argc, char *argv[]) glViewport( 0, 0, 640, 480 ); glMatrixMode( GL_PROJECTION ); + glPushMatrix(); // just for testing glLoadIdentity(); glOrtho( 0, 640, 480, 0, -1, 1 ); |