From 15023432ccba024ff8f1a60ef3f2f746078105ae Mon Sep 17 00:00:00 2001 From: Hannes Janetzek <hannes.janetzek@gmail.com> Date: Thu, 3 Apr 2014 22:53:37 +0200 Subject: [PATCH] GLState: keep track of clear color --- vtm/src/org/oscim/renderer/GLState.java | 14 ++++++++++++++ vtm/src/org/oscim/renderer/MapRenderer.java | 13 +------------ vtm/src/org/oscim/renderer/OffscreenRenderer.java | 3 ++- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/vtm/src/org/oscim/renderer/GLState.java b/vtm/src/org/oscim/renderer/GLState.java index f0d46bfe..fad52349 100644 --- a/vtm/src/org/oscim/renderer/GLState.java +++ b/vtm/src/org/oscim/renderer/GLState.java @@ -30,6 +30,7 @@ public class GLState { private static boolean depth = false; private static boolean stencil = false; private static int shader; + private static float[] clearColor; private static int currentTexId; @@ -43,6 +44,7 @@ public class GLState { stencil = false; shader = -1; currentTexId = -1; + clearColor = null; GL.glDisable(GL20.GL_STENCIL_TEST); GL.glDisable(GL20.GL_DEPTH_TEST); @@ -131,4 +133,16 @@ public class GLState { currentTexId = id; } } + + public static void setClearColor(float[] color) { + if (clearColor != null && + color[0] == clearColor[0] && + color[1] == clearColor[1] && + color[2] == clearColor[2] && + color[3] == clearColor[3]) + return; + + clearColor = color; + GL.glClearColor(color[0], color[1], color[2], color[3]); + } } diff --git a/vtm/src/org/oscim/renderer/MapRenderer.java b/vtm/src/org/oscim/renderer/MapRenderer.java index 58535580..450a0a61 100644 --- a/vtm/src/org/oscim/renderer/MapRenderer.java +++ b/vtm/src/org/oscim/renderer/MapRenderer.java @@ -50,8 +50,6 @@ public class MapRenderer { private static int mQuadVerticesID; public final static int maxQuads = 64; - private static boolean mUpdateColor; - public static long frametime; private static boolean rerender; @@ -116,7 +114,6 @@ public class MapRenderer { public static void setBackgroundColor(int color) { mClearColor = GLUtils.colorToFloat(color); - mUpdateColor = true; } static class BufferItem extends Inlist<BufferItem> { @@ -179,12 +176,7 @@ public class MapRenderer { } private void draw() { - - //if (mUpdateColor) { - float cc[] = mClearColor; - GL.glClearColor(cc[0], cc[1], cc[2], cc[3]); - mUpdateColor = false; - //} + GLState.setClearColor(mClearColor); GL.glDepthMask(true); GL.glStencilMask(0xFF); @@ -307,9 +299,6 @@ public class MapRenderer { quad.length * 4, floatBuffer, GL20.GL_STATIC_DRAW); GL.glBindBuffer(GL20.GL_ARRAY_BUFFER, 0); - if (mClearColor != null) - mUpdateColor = true; - GLState.init(GL); mMap.updateMap(true); diff --git a/vtm/src/org/oscim/renderer/OffscreenRenderer.java b/vtm/src/org/oscim/renderer/OffscreenRenderer.java index 8d3fa863..ad1891a9 100644 --- a/vtm/src/org/oscim/renderer/OffscreenRenderer.java +++ b/vtm/src/org/oscim/renderer/OffscreenRenderer.java @@ -17,6 +17,7 @@ public class OffscreenRenderer extends LayerRenderer { int texH = -1; boolean initialized; + private float[] mClearColor = { 0, 0, 0, 0 }; private boolean useDepthTexture = false; @@ -160,7 +161,7 @@ public class OffscreenRenderer extends LayerRenderer { GL.glBindFramebuffer(GL20.GL_FRAMEBUFFER, fb); GL.glViewport(0, 0, texW, texH); GL.glDepthMask(true); - GL.glClearColor(0, 0, 0, 0); + GLState.setClearColor(mClearColor); GL.glClear(GL20.GL_DEPTH_BUFFER_BIT | GL20.GL_COLOR_BUFFER_BIT); mRenderer.render(viewport);