diff --git a/src/org/mapsforge/android/glrenderer/LineLayer.java b/src/org/mapsforge/android/glrenderer/LineLayer.java
index 7221d673..8cfbf20b 100644
--- a/src/org/mapsforge/android/glrenderer/LineLayer.java
+++ b/src/org/mapsforge/android/glrenderer/LineLayer.java
@@ -43,9 +43,9 @@ class LineLayer extends Layer {
float a = (color >> 24 & 0xff) / 255.0f;
- colors[0] = (color >> 16 & 0xff) / 255.0f * a;
- colors[1] = (color >> 8 & 0xff) / 255.0f * a;
- colors[2] = (color >> 0 & 0xff) / 255.0f * a;
+ colors[0] = (color >> 16 & 0xff) / 255.0f;
+ colors[1] = (color >> 8 & 0xff) / 255.0f;
+ colors[2] = (color >> 0 & 0xff) / 255.0f;
colors[3] = a;
}
diff --git a/src/org/mapsforge/android/glrenderer/MapRenderer.java b/src/org/mapsforge/android/glrenderer/MapRenderer.java
index 401ba20d..b9941a1a 100644
--- a/src/org/mapsforge/android/glrenderer/MapRenderer.java
+++ b/src/org/mapsforge/android/glrenderer/MapRenderer.java
@@ -463,9 +463,9 @@ public class MapRenderer implements org.mapsforge.android.MapRenderer {
}
GLES20.glUniform4f(gPolygonColorHandle,
- (color >> 16 & 0xff) / 255f * alpha,
- (color >> 8 & 0xff) / 255f * alpha,
- (color & 0xff) / 255f * alpha, alpha);
+ (color >> 16 & 0xff) / 255f,
+ (color >> 8 & 0xff) / 255f,
+ (color & 0xff) / 255f, alpha);
// set stencil buffer mask used to draw this layer
GLES20.glStencilFunc(GLES20.GL_EQUAL, 0xff, 1 << c);
@@ -540,11 +540,11 @@ public class MapRenderer implements org.mapsforge.android.MapRenderer {
else {
// clear stencilbuffer
GLES20.glStencilMask(0xFF);
- GLES20.glClear(GLES20.GL_STENCIL_BUFFER_BIT);
+ // GLES20.glClear(GLES20.GL_STENCIL_BUFFER_BIT);
// clear stencilbuffer (tile region)
- // GLES20.glStencilOp(GLES20.GL_ZERO, GLES20.GL_ZERO, GLES20.GL_ZERO);
- // GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
+ GLES20.glStencilOp(GLES20.GL_ZERO, GLES20.GL_ZERO, GLES20.GL_ZERO);
+ GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
}
// stencil op for stencil method polygon drawing
@@ -562,7 +562,7 @@ public class MapRenderer implements org.mapsforge.android.MapRenderer {
continue;
// modify alpha channel
- float s = ((mDrawScale / z) < 1.3f ? 1.3f : (mDrawScale / z));
+ float s = (mDrawScale > 1.3f ? mDrawScale : 1.3f);
colors[cnt] = (colors[cnt] & 0xffffff)
| (byte) ((s - 1) * 0xff) << 24;
}
@@ -1094,10 +1094,10 @@ public class MapRenderer implements org.mapsforge.android.MapRenderer {
GLES20.glEnableVertexAttribArray(gLineVertexPositionHandle);
GLES20.glEnableVertexAttribArray(gLineTexturePositionHandle);
- GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA);
+ GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
GLES20.glDisable(GLES20.GL_DEPTH_TEST);
GLES20.glDisable(GLES20.GL_DITHER);
- GLES20.glClearColor(0.96f, 0.96f, 0.95f, 1.0f);
+ GLES20.glClearColor(0.98f, 0.98f, 0.975f, 1.0f);
GLES20.glClearStencil(0);
}
diff --git a/src/org/mapsforge/android/glrenderer/Shaders.java b/src/org/mapsforge/android/glrenderer/Shaders.java
index 3b169918..9483c042 100644
--- a/src/org/mapsforge/android/glrenderer/Shaders.java
+++ b/src/org/mapsforge/android/glrenderer/Shaders.java
@@ -19,7 +19,6 @@ class Shaders {
final static String gLineVertexShader = ""
+ "precision mediump float; \n"
+ "uniform mat4 u_center;"
- // + "uniform float u_width;"
+ "attribute vec4 a_position;"
+ "attribute vec2 a_st;"
+ "varying vec2 v_st;"
@@ -30,31 +29,65 @@ class Shaders {
final static String gLineFragmentShader = ""
+ "#extension GL_OES_standard_derivatives : enable\n"
- + "#pragma profilepragma blendoperation(gl_FragColor, GL_FUNC_ADD, GL_ONE, GL_ONE_MINUS_SRC_ALPHA)\n"
+ "precision mediump float;"
+ "uniform vec2 u_mode;"
+ "uniform vec4 u_color;"
+ "const float zero = 0.0;"
- + "const vec4 blank = vec4(0.0,0.0,0.0,0.0);"
+ + "const float fuzzf = 1.5;"
+ // + "const vec4 blank = vec4(0.0,0.0,0.0,0.0);"
+ "varying vec2 v_st;"
+ "void main() {"
- + "float width = u_mode[1];"
- + " if (v_st.t == zero){ "
- + " float fuzz = fwidth(v_st.s) * 1.5;"
- + " float min_fuzz = -fuzz * u_mode[0];"
- + " float len = width - abs(v_st.s);"
- // + " if (len > fuzz)"
- // + " gl_FragColor = u_color;"
- // + " else if (len < min_fuzz)"
- // + " gl_FragColor = blank;"
- // + " else"
- + " gl_FragColor = u_color * smoothstep(min_fuzz, fuzz, len);"
- + " } else {"
- + " float fuzz = max(fwidth(v_st.s), fwidth(v_st.t)) * 1.5;"
- + " gl_FragColor = u_color * smoothstep(-fuzz * u_mode[0], fuzz, width - length(v_st));"
- + " } "
+ + " lowp vec4 color = u_color;"
+ + " lowp float len;"
+ + " lowp float fuzz;"
+ + " lowp float width = u_mode[1];"
+ + " if (v_st.t == zero){ "
+ + " fuzz = fwidth(v_st.s) * fuzzf;"
+ + " len = width - abs(v_st.s);"
+ + " } else {"
+ + " fuzz = max(fwidth(v_st.s), fwidth(v_st.t)) * fuzzf;"
+ + " len = width - length(v_st);"
+ + " } "
+ + " lowp float min_fuzz = -fuzz * u_mode[0];"
+ + " if (len < min_fuzz)"
+ + " discard;"
+ // + " color = blank;"
+ + " else {"
+ + " if (len < fuzz)"
+ + " color.a *= smoothstep(min_fuzz, fuzz, len);"
+ + " gl_FragColor = color;"
+ + " }"
+ "}";
+ // final static String gLineFragmentShader = ""
+ // + "#extension GL_OES_standard_derivatives : enable\n"
+ // + "#pragma profilepragma blendoperation(gl_FragColor, GL_FUNC_ADD, GL_ONE, GL_ONE_MINUS_SRC_ALPHA)\n"
+ // + "precision mediump float;"
+ // + "uniform vec2 u_mode;"
+ // + "uniform vec4 u_color;"
+ // + "const float zero = 0.0;"
+ // + "const vec4 blank = vec4(0.0,0.0,0.0,0.0);"
+ // + "varying vec2 v_st;"
+ // + "void main() {"
+ // + "lowp color = u_color;"
+ // + "lowp alpha = 1.0;"
+ // + "float width = u_mode[1];"
+ // + " if (v_st.t == zero){ "
+ // + " float fuzz = fwidth(v_st.s) * 1.5;"
+ // + " float min_fuzz = -fuzz * u_mode[0];"
+ // + " float len = width - abs(v_st.s);"
+ // // + " if (len > fuzz)"
+ // // + " gl_FragColor = u_color;"
+ // // + " else if (len < min_fuzz)"
+ // // + " gl_FragColor = blank;"
+ // // + " else"
+ // + " gl_FragColor = u_color * smoothstep(min_fuzz, fuzz, len);"
+ // + " } else {"
+ // + " float fuzz = max(fwidth(v_st.s), fwidth(v_st.t)) * 1.5;"
+ // + " gl_FragColor = u_color * smoothstep(-fuzz * u_mode[0], fuzz, width - length(v_st));"
+ // + " } "
+ // + "glFragColor = color"
+ // + "}";
// final static String gLineFragmentShader = ""
// + "#extension GL_OES_standard_derivatives : enable\n"
// + "precision mediump float;"
@@ -135,7 +168,6 @@ class Shaders {
+ "}";
final static String gPolygonFragmentShader = ""
- + "#pragma profilepragma blendoperation(gl_FragColor, GL_FUNC_ADD, GL_ONE, GL_ONE_MINUS_SRC_ALPHA)\n"
+ "precision mediump float;"
+ "uniform vec4 u_color;"
+ "void main() {"
diff --git a/src/org/mapsforge/android/rendertheme/osmarender/osmarender.xml b/src/org/mapsforge/android/rendertheme/osmarender/osmarender.xml
index d6adb54e..fb746218 100644
--- a/src/org/mapsforge/android/rendertheme/osmarender/osmarender.xml
+++ b/src/org/mapsforge/android/rendertheme/osmarender/osmarender.xml
@@ -56,12 +56,12 @@
stroke-linecap="butt" />
+ v="pedestrian|unclassified|residential|living_street|byway|tertiary">
+ v="secondary_link|primary_link|trunk_link|motorway_link|secondary|primary">
@@ -106,16 +106,22 @@
-
-
-
+
+
-
+
+
+
+
@@ -160,7 +166,7 @@
-
+
@@ -173,23 +179,23 @@
-
+
-
-
+
+
+
+
+
-
+
-
-
+
+
+
-
-
-
-
-