diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-04-19 16:35:14 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-04-19 16:35:14 -0700 |
commit | 8303c637cd945c5c66f18c12addeaef8b8d7f453 (patch) | |
tree | 3288b5b7c02ee2df56869efaecdb9db4a7d020bb | |
parent | e17794cbbff69562ed797f97bac05c0ee29eb92d (diff) |
refactor immediate mode code
-rw-r--r-- | src/library_gl.js | 22 | ||||
-rw-r--r-- | tests/sdl_ogl.c | 12 |
2 files changed, 26 insertions, 8 deletions
diff --git a/src/library_gl.js b/src/library_gl.js index 152d6a61..4906c6bf 100644 --- a/src/library_gl.js +++ b/src/library_gl.js @@ -1072,6 +1072,7 @@ var LibraryGL = { renderers: {}, renderer: null, + rendererComponents: {}, // The following data structures are used for OpenGL Immediate Mode matrix routines. matrix: { @@ -1110,9 +1111,15 @@ var LibraryGL = { }, // Renderers + addRendererComponent: function(component) { + if (this.rendererComponents[component]) return; + this.rendererComponents[component] = 1; + this.renderer += component; + }, + setRenderer: function(renderer) { this.renderer = renderer; - if (this.renderers[renderer]) return; + if (this.renderers[renderer]) return this.renderers[renderer]; // Create renderer var vertexSize = 0, positionSize = 0, positionOffset = 0, textureSize = 0, textureOffset = 0; @@ -1192,6 +1199,8 @@ var LibraryGL = { } }; this.renderers[renderer].init(); + + return this.renderers[renderer]; }, // Main functions @@ -1248,7 +1257,7 @@ var LibraryGL = { }; }, flush: function() { - var renderer = this.renderers[this.renderer]; + var renderer = this.setRenderer(this.renderer); // Generate index data in a format suitable for GLES 2.0/WebGL // TODO: if the mode is one that works in GLES 2.0/WebGL (not GL_QUADS), do not generate indexes at all @@ -1313,7 +1322,8 @@ var LibraryGL = { glBegin: function(mode) { if (!GL.immediate.initted) GL.immediate.init(); GL.immediate.mode = mode; - GL.immediate.renderer = null; + GL.immediate.renderer = ''; + GL.immediate.rendererComponents = {}; GL.immediate.vertexData = GL.immediate.tempData; }, @@ -1333,10 +1343,7 @@ var LibraryGL = { assert(GL.immediate.vertexCounter < GL.immediate.maxElements); assert(GL.immediate.vertexCounter % 5 == 0); #endif - if (!GL.immediate.renderer) { - // Decide renderer based on attributes used // TODO: generalize - GL.immediate.setRenderer('T2V3'); - } + GL.immediate.addRendererComponent('V3'); }, glVertex2f: 'glVertex3f', @@ -1347,6 +1354,7 @@ var LibraryGL = { #endif GL.immediate.vertexData[GL.immediate.vertexCounter++] = u; GL.immediate.vertexData[GL.immediate.vertexCounter++] = v; + GL.immediate.addRendererComponent('T2'); }, glTexCoord2f: 'glTexCoord2i', diff --git a/tests/sdl_ogl.c b/tests/sdl_ogl.c index 9aaae280..32260f91 100644 --- a/tests/sdl_ogl.c +++ b/tests/sdl_ogl.c @@ -138,7 +138,17 @@ int main(int argc, char *argv[]) glTexCoord2i( 1, 1 ); glVertex3f( 300, 400, 0 ); glTexCoord2i( 0, 1 ); glVertex3f( 500, 410, 0 ); glEnd(); - +/* + glDisable(GL_TEXTURE_2D); + + glBegin( GL_QUADS ); + glVertex3f( 10, 10, 0 ); + glVertex3f( 300, 10, 0 ); + glVertex3f( 300, 128, 0 ); + glVertex3f( 10, 128, 0 ); + glEnd(); +*/ + SDL_GL_SwapBuffers(); #if !EMSCRIPTEN |