LocationRenderer: add reverse version of shader 1 (#318)
This commit is contained in:
parent
559f4899dd
commit
d8001e23f6
@ -3,6 +3,7 @@
|
||||
* Copyright 2013 Hannes Janetzek
|
||||
* Copyright 2016 devemux86
|
||||
* Copyright 2016 ocsike
|
||||
* Copyright 2017 Mathieu De Brito
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
@ -36,7 +37,7 @@ public class LocationRenderer extends LayerRenderer {
|
||||
private static final float CIRCLE_SIZE = 60;
|
||||
private static final int SHOW_ACCURACY_ZOOM = 16;
|
||||
|
||||
public enum Shader {SHADER_1, SHADER_2}
|
||||
public enum Shader {SHADER_1, SHADER_1_REVERSE, SHADER_2}
|
||||
|
||||
private final Map mMap;
|
||||
private final Layer mLayer;
|
||||
@ -248,6 +249,9 @@ public class LocationRenderer extends LayerRenderer {
|
||||
case SHADER_1:
|
||||
shader = GLShader.createProgram(vShaderStr, fShaderStr1);
|
||||
break;
|
||||
case SHADER_1_REVERSE:
|
||||
shader = GLShader.createProgram(vShaderStr, fShaderStr1Reverse);
|
||||
break;
|
||||
case SHADER_2:
|
||||
shader = GLShader.createProgram(vShaderStr, fShaderStr2);
|
||||
break;
|
||||
@ -306,6 +310,35 @@ public class LocationRenderer extends LayerRenderer {
|
||||
+ " gl_FragColor = vec4(0.2, 0.2, 0.8, 1.0) * a;"
|
||||
+ "}}";
|
||||
|
||||
private static final String fShaderStr1Reverse = ""
|
||||
+ "precision mediump float;"
|
||||
+ "varying vec2 v_tex;"
|
||||
+ "uniform float u_scale;"
|
||||
+ "uniform float u_phase;"
|
||||
+ "uniform vec2 u_dir;"
|
||||
|
||||
+ "void main() {"
|
||||
+ " float len = 1.0 - length(v_tex);"
|
||||
+ " if (u_dir.x == 0.0 && u_dir.y == 0.0){"
|
||||
+ " gl_FragColor = vec4(0.2, 0.2, 0.8, 1.0) * len;"
|
||||
+ " } else {"
|
||||
/// outer ring
|
||||
+ " float a = smoothstep(0.0, 2.0 / u_scale, len);"
|
||||
/// inner ring
|
||||
+ " float b = 0.5 * smoothstep(4.0 / u_scale, 5.0 / u_scale, len);"
|
||||
/// center point
|
||||
+ " float c = 0.5 * (1.0 - smoothstep(14.0 / u_scale, 16.0 / u_scale, 1.0 - len));"
|
||||
+ " vec2 dir = normalize(v_tex);"
|
||||
+ " float d = dot(dir, u_dir); "
|
||||
/// 0.5 width of viewshed
|
||||
+ " d = clamp(step(0.5, d), 0.4, 0.7);"
|
||||
/// - subtract inner from outer to create the outline
|
||||
/// - multiply by viewshed
|
||||
/// - add center point
|
||||
+ " a = d * (a - (b + c)) + c;"
|
||||
+ " gl_FragColor = vec4(0.2, 0.2, 0.8, 1.0) * a;"
|
||||
+ "}}";
|
||||
|
||||
private static final String fShaderStr2 = ""
|
||||
+ "precision mediump float;"
|
||||
+ "varying vec2 v_tex;"
|
||||
|
Loading…
x
Reference in New Issue
Block a user