aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-04-19 16:35:14 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-04-19 16:35:14 -0700
commit8303c637cd945c5c66f18c12addeaef8b8d7f453 (patch)
tree3288b5b7c02ee2df56869efaecdb9db4a7d020bb
parente17794cbbff69562ed797f97bac05c0ee29eb92d (diff)
refactor immediate mode code
-rw-r--r--src/library_gl.js22
-rw-r--r--tests/sdl_ogl.c12
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