From 13ee04baea96e62badcdfbcdf4877f161dbddf78 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sat, 1 Dec 2012 09:58:41 -0500 Subject: [PATCH] draw both sides of tile as its rotating --- .../holtrop/opengltest/MyRenderer.java | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/src/com/homelinux/holtrop/opengltest/MyRenderer.java b/src/com/homelinux/holtrop/opengltest/MyRenderer.java index 679505c..d47a0eb 100644 --- a/src/com/homelinux/holtrop/opengltest/MyRenderer.java +++ b/src/com/homelinux/holtrop/opengltest/MyRenderer.java @@ -169,6 +169,7 @@ public class MyRenderer implements GLSurfaceView.Renderer */ GLES20.glClearColor(1.0f, 0.6f, 0.1f, 1.0f); + GLES20.glEnable(GLES20.GL_CULL_FACE); } private void update_tiles(long elapsed) @@ -219,26 +220,32 @@ public class MyRenderer implements GLSurfaceView.Renderer for (int x = 0; x < GRID_WIDTH; x++) { Tile t = m_tiles[x][y]; - Matrix.setIdentityM(m_modelview, 0); - Matrix.translateM(m_modelview, 0, - x + 0.5f - GRID_WIDTH / 2.0f, - y + 0.5f - GRID_HEIGHT / 2.0f, - -DISTANCE); - if (t.flipping) + for (int side = 0; side < 2; side++) { - Matrix.rotateM(m_modelview, 0, - t.rotation, - AXES[t.axis][0], AXES[t.axis][1], AXES[t.axis][2]); - } - GLES20.glUniformMatrix4fv( - GLES20.glGetUniformLocation(m_program, "modelview"), - 1, false, m_modelview, 0); - GLES20.glUniform1i( - GLES20.glGetUniformLocation(m_program, "side"), - t.side ? 1 : 0); + int t_side = t.side ? 1 : 0; + if (!t.flipping && (side == 1)) + continue; + Matrix.setIdentityM(m_modelview, 0); + Matrix.translateM(m_modelview, 0, + x + 0.5f - GRID_WIDTH / 2.0f, + y + 0.5f - GRID_HEIGHT / 2.0f, + -DISTANCE); + if (t.flipping) + { + Matrix.rotateM(m_modelview, 0, + t.rotation + side * 180.0f, + AXES[t.axis][0], AXES[t.axis][1], AXES[t.axis][2]); + } + GLES20.glUniformMatrix4fv( + GLES20.glGetUniformLocation(m_program, "modelview"), + 1, false, m_modelview, 0); + GLES20.glUniform1i( + GLES20.glGetUniformLocation(m_program, "side"), + t_side ^ side); - GLES20.glDrawArrays(GLES20.GL_TRIANGLE_FAN, 0, 4); - checkGLError("glDrawArrays"); + GLES20.glDrawArrays(GLES20.GL_TRIANGLE_FAN, 0, 4); + checkGLError("glDrawArrays"); + } } }