aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-05-05 18:05:42 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-05-05 18:05:42 -0700
commit642819024e8bef56119d37a34394bf85397d777c (patch)
tree2b19918faeb5508cbb220d788b4a88cec113e9aa
parentd24edd5719c6156fc3223cf4cd4e4e2b9fc3a171 (diff)
refactor gl code for closure compiler, and add more testing
-rw-r--r--src/library_browser.js7
-rw-r--r--src/library_gl.js63
-rw-r--r--src/library_sdl.js5
-rwxr-xr-xtests/runner.py4
-rw-r--r--tests/sdl_ogl.c1
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 );