From 8e6eb8db5ab795c4da7c1393b99d6b363dd42cba Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Mon, 28 Feb 2011 02:26:30 +0000 Subject: [PATCH] Various changes to the Scene class. Not sure what's useful. --- src/scene.cpp | 74 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 48 insertions(+), 26 deletions(-) diff --git a/src/scene.cpp b/src/scene.cpp index d6b661d8..065a885c 100644 --- a/src/scene.cpp +++ b/src/scene.cpp @@ -36,7 +36,7 @@ struct Tile #if defined HAVE_GL_2X || defined HAVE_GLES_2X extern Shader *stdshader; #endif -extern mat4 model_matrix; +extern mat4 proj_matrix, view_matrix, model_matrix; /* * Scene implementation class @@ -177,15 +177,33 @@ void Scene::Render() // XXX: rename to Blit() glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); #else - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LEQUAL); - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_GEQUAL, 0.01f); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + //glEnable(GL_DEPTH_TEST); + //glDepthFunc(GL_LEQUAL); + //glEnable(GL_ALPHA_TEST); + //glAlphaFunc(GL_GEQUAL, 0.01f); + //glEnable(GL_BLEND); + //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +#if 0 + /* Reset all model-view-projection matrices */ + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + glMultMatrixf(&proj_matrix[0][0]); +#endif + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); glLoadIdentity(); - glMultMatrixf(&model_matrix[0][0]); + //glMultMatrixf(&model_matrix[0][0]); + glMultMatrixf(&view_matrix[0][0]); + + /* Set up state machine */ + glDisable(GL_DEPTH_TEST); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glEnable(GL_TEXTURE_2D); + glEnableClientState(GL_VERTEX_ARRAY); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); #endif for (int buf = 0, i = 0, n; i < data->ntiles; i = n, buf += 2) @@ -217,48 +235,43 @@ void Scene::Render() // XXX: rename to Blit() #if defined HAVE_GL_2X || defined HAVE_GLES_2X stdshader->Bind(); #endif - glActiveTexture(GL_TEXTURE0); + + /* Bind texture */ Tiler::Bind(data->tiles[i].code); + /* Bind vertex, color and texture coordinate buffers */ #if defined HAVE_GL_2X || defined HAVE_GLES_2X # if !defined HAVE_GLES_2X glBindVertexArray(data->vao); # endif glEnableVertexAttribArray(attr_pos); glEnableVertexAttribArray(attr_tex); -#else - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); -#endif -#if defined HAVE_GL_2X || defined HAVE_GLES_2X glBindBuffer(GL_ARRAY_BUFFER, data->bufs[buf]); glBufferData(GL_ARRAY_BUFFER, 18 * (n - i) * sizeof(GLfloat), vertex, GL_STATIC_DRAW); glVertexAttribPointer(attr_pos, 3, GL_FLOAT, GL_FALSE, 0, 0); -#elif defined HAVE_GL_1X - glBindBuffer(GL_ARRAY_BUFFER, data->bufs[buf]); - glBufferData(GL_ARRAY_BUFFER, 18 * (n - i) * sizeof(GLfloat), - vertex, GL_STATIC_DRAW); - glVertexPointer(3, GL_FLOAT, 0, NULL); -#else - glVertexPointer(3, GL_FLOAT, 0, vertex); -#endif -#if defined HAVE_GL_2X || defined HAVE_GLES_2X glBindBuffer(GL_ARRAY_BUFFER, data->bufs[buf + 1]); glBufferData(GL_ARRAY_BUFFER, 12 * (n - i) * sizeof(GLfloat), texture, GL_STATIC_DRAW); glVertexAttribPointer(attr_tex, 2, GL_FLOAT, GL_FALSE, 0, 0); #elif defined HAVE_GL_1X + glBindBuffer(GL_ARRAY_BUFFER, data->bufs[buf]); + glBufferData(GL_ARRAY_BUFFER, 18 * (n - i) * sizeof(GLfloat), + vertex, GL_STATIC_DRAW); + glVertexPointer(3, GL_FLOAT, 0, NULL); + glBindBuffer(GL_ARRAY_BUFFER, data->bufs[buf + 1]); glBufferData(GL_ARRAY_BUFFER, 12 * (n - i) * sizeof(GLfloat), texture, GL_STATIC_DRAW); glTexCoordPointer(2, GL_FLOAT, 0, NULL); #else + glVertexPointer(3, GL_FLOAT, 0, vertex); glTexCoordPointer(2, GL_FLOAT, 0, texture); #endif + /* Draw arrays */ glDrawArrays(GL_TRIANGLES, 0, (n - i) * 6); #if defined HAVE_GL_2X || defined HAVE_GLES_2X @@ -267,15 +280,24 @@ void Scene::Render() // XXX: rename to Blit() # endif glDisableVertexAttribArray(attr_pos); glDisableVertexAttribArray(attr_tex); -#else - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); #endif free(vertex); free(texture); } +#if defined HAVE_GL_1X || defined HAVE_GLES_1X + /* Disable state machine features */ + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + + /* Restore matrices */ + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); +#endif + free(data->tiles); data->tiles = 0; data->ntiles = 0;