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);