From c462793b9983a893ed73793c16814047be639944 Mon Sep 17 00:00:00 2001
From: Hannes Janetzek <hannes.janetzek@gmail.com>
Date: Fri, 11 Jan 2013 23:44:30 +0100
Subject: [PATCH] move shaders to repective renderer classes

---
 src/org/oscim/renderer/LineRenderer.java    |  69 +++++++++-
 src/org/oscim/renderer/PolygonRenderer.java |  47 ++++++-
 src/org/oscim/renderer/Shaders.java         | 132 --------------------
 src/org/oscim/renderer/TextureRenderer.java |  36 +++++-
 4 files changed, 142 insertions(+), 142 deletions(-)

diff --git a/src/org/oscim/renderer/LineRenderer.java b/src/org/oscim/renderer/LineRenderer.java
index 377fd8f7..e289f830 100644
--- a/src/org/oscim/renderer/LineRenderer.java
+++ b/src/org/oscim/renderer/LineRenderer.java
@@ -56,15 +56,15 @@ public final class LineRenderer {
 	private static int[] hLineMode = new int[2];
 
 	static boolean init() {
-		lineProgram[0] = GlUtils.createProgram(Shaders.lineVertexShader,
-				Shaders.lineFragmentShader);
+		lineProgram[0] = GlUtils.createProgram(lineVertexShader,
+				lineFragmentShader);
 		if (lineProgram[0] == 0) {
 			Log.e(TAG, "Could not create line program.");
 			return false;
 		}
 
-		lineProgram[1] = GlUtils.createProgram(Shaders.lineVertexShader,
-				Shaders.lineSimpleFragmentShader);
+		lineProgram[1] = GlUtils.createProgram(lineVertexShader,
+				lineSimpleFragmentShader);
 		if (lineProgram[1] == 0) {
 			Log.e(TAG, "Could not create simple line program.");
 			return false;
@@ -212,4 +212,65 @@ public final class LineRenderer {
 
 		return l;
 	}
+
+	private final static String lineVertexShader = ""
+			+ "precision mediump float;"
+			+ "uniform mat4 u_mvp;"
+			+ "uniform float u_width;"
+			+ "attribute vec2 a_position;"
+			+ "attribute vec2 a_st;"
+			+ "varying vec2 v_st;"
+			+ "const float dscale = 8.0/2048.0;"
+			+ "void main() {"
+			// scale extrusion to u_width pixel
+			// just ignore the two most insignificant bits of a_st :)
+			+ "  vec2 dir = dscale * u_width * a_st;"
+			+ "  gl_Position = u_mvp * vec4(a_position + dir, 0.0,1.0);"
+			// last two bits of a_st hold the texture coordinates
+			+ "  v_st = u_width * (abs(mod(a_st,4.0)) - 1.0);"
+			// use bit operations when available (gles 1.3)
+			// + "  v_st = u_width * vec2(ivec2(a_st) & 3 - 1);"
+			+ "}";
+
+	private final static String lineSimpleFragmentShader = ""
+			+ "precision mediump float;"
+			+ "uniform float u_wscale;"
+			+ "uniform float u_width;"
+			+ "uniform int u_mode;"
+			+ "uniform vec4 u_color;"
+			+ "varying vec2 v_st;"
+			+ "void main() {"
+			+ "  float len;"
+			+ "  if (u_mode == 0)"
+			+ "    len = u_width - abs(v_st.s);"
+			+ "  else "
+			+ "    len = u_width - length(v_st);"
+			// fade to alpha. u_wscale is the width in pixel which should be
+			// faded, u_width - len the position of this fragment on the
+			// perpendicular to this line segment, only works with no
+			// perspective
+			+ "  gl_FragColor = u_color * min(1.0, len / u_wscale);"
+			+ "}";
+
+	private final static String lineFragmentShader = ""
+			+ "#extension GL_OES_standard_derivatives : enable\n"
+			+ "precision mediump float;"
+			+ "uniform float u_wscale;"
+			+ "uniform float u_width;"
+			+ "uniform int u_mode;"
+			+ "uniform vec4 u_color;"
+			+ "varying vec2 v_st;"
+			+ "void main() {"
+			+ "  float len;"
+			+ "  float fuzz;"
+			+ "  if (u_mode == 0){"
+			+ "    len = u_width - abs(v_st.s);"
+			+ "    fuzz = u_wscale + fwidth(v_st.s);"
+			+ "  } else {"
+			+ "    len = u_width - length(v_st);"
+			+ "    vec2 st_width = fwidth(v_st);"
+			+ "    fuzz = u_wscale + max(st_width.s, st_width.t);"
+			+ "  }"
+			+ "  gl_FragColor = u_color * min(1.0, len / fuzz);"
+			+ "}";
 }
diff --git a/src/org/oscim/renderer/PolygonRenderer.java b/src/org/oscim/renderer/PolygonRenderer.java
index 29b97cdd..16020b86 100644
--- a/src/org/oscim/renderer/PolygonRenderer.java
+++ b/src/org/oscim/renderer/PolygonRenderer.java
@@ -69,10 +69,10 @@ public final class PolygonRenderer {
 	static boolean init() {
 
 		// Set up the program for rendering polygons
-		//		polygonProgram = GlUtils.createProgram(Shaders.polygonVertexShaderZ,
-		//				Shaders.polygonFragmentShaderZ);
-		polygonProgram = GlUtils.createProgram(Shaders.polygonVertexShader,
-				Shaders.polygonFragmentShader);
+		//		polygonProgram = GlUtils.createProgram(polygonVertexShaderZ,
+		//				polygonFragmentShaderZ);
+		polygonProgram = GlUtils.createProgram(polygonVertexShader,
+				polygonFragmentShader);
 
 		if (polygonProgram == 0) {
 			// Log.e(TAG, "Could not create polygon program.");
@@ -337,4 +337,43 @@ public final class PolygonRenderer {
 
 		GlUtils.checkGlError("draw debug");
 	}
+
+	private final static String polygonVertexShader = ""
+			+ "precision highp float;"
+			+ "uniform mat4 u_mvp;"
+			+ "attribute vec4 a_position;"
+			+ "void main() {"
+			+ "  gl_Position = u_mvp * a_position;"
+			+ "}";
+
+	private final static String polygonFragmentShader = ""
+			+ "precision highp float;"
+			+ "uniform vec4 u_color;"
+			+ "void main() {"
+			+ "  gl_FragColor = u_color;"
+			+ "}";
+
+	private final static String polygonVertexShaderZ = ""
+			+ "precision highp float;"
+			+ "uniform mat4 u_mvp;"
+			+ "attribute vec4 a_position;"
+			+ "varying float z;"
+			+ "void main() {"
+			+ "  gl_Position = u_mvp * a_position;"
+			+ "  z = gl_Position.z;"
+			+ "}";
+	private final static String polygonFragmentShaderZ = ""
+			+ "precision highp float;"
+			+ "uniform vec4 u_color;"
+			+ "varying float z;"
+			+ "void main() {"
+			+ "if (z < -1.0)"
+			+ "  gl_FragColor = vec4(0.0, z + 2.0, 0.0, 1.0)*0.8;"
+			+ "else if (z < 0.0)"
+			+ "  gl_FragColor = vec4(z * -1.0, 0.0, 0.0, 1.0)*0.8;"
+			+ "else if (z < 1.0)"
+			+ "  gl_FragColor = vec4(0.0, 0.0, z, 1.0)*0.8;"
+			+ "else"
+			+ "  gl_FragColor = vec4(0.0, z - 1.0, 0.0, 1.0)*0.8;"
+			+ "}";
 }
diff --git a/src/org/oscim/renderer/Shaders.java b/src/org/oscim/renderer/Shaders.java
index b9471701..bb40cdb0 100644
--- a/src/org/oscim/renderer/Shaders.java
+++ b/src/org/oscim/renderer/Shaders.java
@@ -17,138 +17,6 @@ package org.oscim.renderer;
 
 public final class Shaders {
 
-	final static String lineVertexShader = ""
-			+ "precision mediump float;"
-			+ "uniform mat4 u_mvp;"
-			+ "uniform float u_width;"
-			+ "attribute vec2 a_position;"
-			+ "attribute vec2 a_st;"
-			+ "varying vec2 v_st;"
-			+ "const float dscale = 8.0/2048.0;"
-			+ "void main() {"
-			// scale extrusion to u_width pixel
-			// just ignore the two most insignificant bits of a_st :)
-			+ "  vec2 dir = dscale * u_width * a_st;"
-			+ "  gl_Position = u_mvp * vec4(a_position + dir, 0.0,1.0);"
-			// last two bits of a_st hold the texture coordinates
-			+ "  v_st = u_width * (abs(mod(a_st,4.0)) - 1.0);"
-			// use bit operations when available (gles 1.3)
-			// + "  v_st = u_width * vec2(ivec2(a_st) & 3 - 1);"
-			+ "}";
-
-	final static String lineSimpleFragmentShader = ""
-			+ "precision mediump float;"
-			+ "uniform float u_wscale;"
-			+ "uniform float u_width;"
-			+ "uniform int u_mode;"
-			+ "uniform vec4 u_color;"
-			+ "varying vec2 v_st;"
-			+ "void main() {"
-			+ "  float len;"
-			+ "  if (u_mode == 0)"
-			+ "    len = u_width - abs(v_st.s);"
-			+ "  else "
-			+ "    len = u_width - length(v_st);"
-			// fade to alpha. u_wscale is the width in pixel which should be
-			// faded, u_width - len the position of this fragment on the
-			// perpendicular to this line segment, only works with no
-			// perspective
-			+ "  gl_FragColor = u_color * min(1.0, len / u_wscale);"
-			+ "}";
-
-	final static String lineFragmentShader = ""
-			+ "#extension GL_OES_standard_derivatives : enable\n"
-			+ "precision mediump float;"
-			+ "uniform float u_wscale;"
-			+ "uniform float u_width;"
-			+ "uniform int u_mode;"
-			+ "uniform vec4 u_color;"
-			+ "varying vec2 v_st;"
-			+ "void main() {"
-			+ "  float len;"
-			+ "  float fuzz;"
-			+ "  if (u_mode == 0){"
-			+ "    len = u_width - abs(v_st.s);"
-			+ "    fuzz = u_wscale + fwidth(v_st.s);"
-			+ "  } else {"
-			+ "    len = u_width - length(v_st);"
-			+ "    vec2 st_width = fwidth(v_st);"
-			+ "    fuzz = u_wscale + max(st_width.s, st_width.t);"
-			+ "  }"
-			+ "  gl_FragColor = u_color * min(1.0, len / fuzz);"
-			+ "}";
-
-	final static String polygonVertexShader = ""
-			+ "precision highp float;"
-			+ "uniform mat4 u_mvp;"
-			+ "attribute vec4 a_position;"
-			+ "void main() {"
-			+ "  gl_Position = u_mvp * a_position;"
-			+ "}";
-
-	final static String polygonFragmentShader = ""
-			+ "precision highp float;"
-			+ "uniform vec4 u_color;"
-			+ "void main() {"
-			+ "  gl_FragColor = u_color;"
-			+ "}";
-
-	final static String polygonVertexShaderZ = ""
-			+ "precision highp float;"
-			+ "uniform mat4 u_mvp;"
-			+ "attribute vec4 a_position;"
-			+ "varying float z;"
-			+ "void main() {"
-			+ "  gl_Position = u_mvp * a_position;"
-			+ "  z = gl_Position.z;"
-			+ "}";
-	final static String polygonFragmentShaderZ = ""
-			+ "precision highp float;"
-			+ "uniform vec4 u_color;"
-			+ "varying float z;"
-			+ "void main() {"
-			+ "if (z < -1.0)"
-			+ "  gl_FragColor = vec4(0.0, z + 2.0, 0.0, 1.0)*0.8;"
-			+ "else if (z < 0.0)"
-			+ "  gl_FragColor = vec4(z * -1.0, 0.0, 0.0, 1.0)*0.8;"
-			+ "else if (z < 1.0)"
-			+ "  gl_FragColor = vec4(0.0, 0.0, z, 1.0)*0.8;"
-			+ "else"
-			+ "  gl_FragColor = vec4(0.0, z - 1.0, 0.0, 1.0)*0.8;"
-			+ "}";
-
-	final static String textVertexShader = ""
-			+ "precision highp float; "
-			+ "attribute vec4 vertex;"
-			+ "attribute vec2 tex_coord;"
-			+ "uniform mat4 u_mv;"
-			+ "uniform mat4 u_proj;"
-			+ "uniform float u_scale;"
-			+ "uniform float u_swidth;"
-			+ "varying vec2 tex_c;"
-			+ "const vec2 div = vec2(1.0/2048.0,1.0/2048.0);"
-			+ "const float coord_scale = 0.125;"
-			+ "void main() {"
-			+ "  vec4 pos;"
-			+ " if (mod(vertex.x, 2.0) == 0.0){"
-			+ "       pos = u_proj * (u_mv * vec4(vertex.xy + vertex.zw * u_scale, 0.02, 1.0));"
-			+ "  } else {"
-			// // place as billboard
-			+ "    vec4 dir = u_mv * vec4(vertex.xy, 0.0, 1.0);"
-			+ "    pos = u_proj * (dir + vec4(vertex.zw * (coord_scale * u_swidth), 0.02, 0.0));"
-			+ "  }"
-			+ "  gl_Position = pos;"
-			+ "  tex_c = tex_coord * div;"
-			+ "}";
-
-	final static String textFragmentShader = ""
-			+ "precision highp float;"
-			+ "uniform sampler2D tex;"
-			+ "varying vec2 tex_c;"
-			+ "void main() {"
-			+ "   gl_FragColor = texture2D(tex, tex_c.xy);"
-			+ "}";
-
 	// final static String lineVertexZigZagShader = ""
 	// + "precision mediump float;"
 	// + "uniform mat4 mvp;"
diff --git a/src/org/oscim/renderer/TextureRenderer.java b/src/org/oscim/renderer/TextureRenderer.java
index 2bfb8aa5..844e8808 100644
--- a/src/org/oscim/renderer/TextureRenderer.java
+++ b/src/org/oscim/renderer/TextureRenderer.java
@@ -44,8 +44,8 @@ public final class TextureRenderer {
 	private final static int MAX_ITEMS = 50;
 
 	static void init() {
-		mTextureProgram = GlUtils.createProgram(Shaders.textVertexShader,
-				Shaders.textFragmentShader);
+		mTextureProgram = GlUtils.createProgram(textVertexShader,
+				textFragmentShader);
 
 		hTextureMVMatrix = GLES20.glGetUniformLocation(mTextureProgram, "u_mv");
 		hTextureProjMatrix = GLES20.glGetUniformLocation(mTextureProgram, "u_proj");
@@ -144,4 +144,36 @@ public final class TextureRenderer {
 
 		return layer.next;
 	}
+
+	private final static String textVertexShader = ""
+			+ "precision highp float; "
+			+ "attribute vec4 vertex;"
+			+ "attribute vec2 tex_coord;"
+			+ "uniform mat4 u_mv;"
+			+ "uniform mat4 u_proj;"
+			+ "uniform float u_scale;"
+			+ "uniform float u_swidth;"
+			+ "varying vec2 tex_c;"
+			+ "const vec2 div = vec2(1.0/2048.0,1.0/2048.0);"
+			+ "const float coord_scale = 0.125;"
+			+ "void main() {"
+			+ "  vec4 pos;"
+			+ " if (mod(vertex.x, 2.0) == 0.0){"
+			+ "       pos = u_proj * (u_mv * vec4(vertex.xy + vertex.zw * u_scale, 0.02, 1.0));"
+			+ "  } else {"
+			// // place as billboard
+			+ "    vec4 dir = u_mv * vec4(vertex.xy, 0.0, 1.0);"
+			+ "    pos = u_proj * (dir + vec4(vertex.zw * (coord_scale * u_swidth), 0.02, 0.0));"
+			+ "  }"
+			+ "  gl_Position = pos;"
+			+ "  tex_c = tex_coord * div;"
+			+ "}";
+
+	private final static String textFragmentShader = ""
+			+ "precision highp float;"
+			+ "uniform sampler2D tex;"
+			+ "varying vec2 tex_c;"
+			+ "void main() {"
+			+ "   gl_FragColor = texture2D(tex, tex_c.xy);"
+			+ "}";
 }