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 @@ - + - - + + + + + - + - - + + + - - - - -