Location renderer: activate all fragment shaders #171
This commit is contained in:
parent
769dd696e3
commit
50ccecc259
@ -30,6 +30,8 @@ import static org.oscim.backend.GLAdapter.gl;
|
|||||||
public class LocationRenderer extends LayerRenderer {
|
public class LocationRenderer extends LayerRenderer {
|
||||||
private static final int SHOW_ACCURACY_ZOOM = 16;
|
private static final int SHOW_ACCURACY_ZOOM = 16;
|
||||||
|
|
||||||
|
public enum Shader {SHADER_1, SHADER_2}
|
||||||
|
|
||||||
private final Map mMap;
|
private final Map mMap;
|
||||||
private final Layer mLayer;
|
private final Layer mLayer;
|
||||||
|
|
||||||
@ -60,6 +62,7 @@ public class LocationRenderer extends LayerRenderer {
|
|||||||
private Callback mCallback;
|
private Callback mCallback;
|
||||||
private final Point mLocation = new Point(Double.NaN, Double.NaN);
|
private final Point mLocation = new Point(Double.NaN, Double.NaN);
|
||||||
private double mRadius;
|
private double mRadius;
|
||||||
|
private Shader mShader = Shader.SHADER_1;
|
||||||
private int mShowAccuracyZoom = SHOW_ACCURACY_ZOOM;
|
private int mShowAccuracyZoom = SHOW_ACCURACY_ZOOM;
|
||||||
|
|
||||||
public LocationRenderer(Map map, Layer layer) {
|
public LocationRenderer(Map map, Layer layer) {
|
||||||
@ -77,6 +80,10 @@ public class LocationRenderer extends LayerRenderer {
|
|||||||
mRadius = radius;
|
mRadius = radius;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setShader(Shader shader) {
|
||||||
|
mShader = shader;
|
||||||
|
}
|
||||||
|
|
||||||
public void setShowAccuracyZoom(int showAccuracyZoom) {
|
public void setShowAccuracyZoom(int showAccuracyZoom) {
|
||||||
mShowAccuracyZoom = showAccuracyZoom;
|
mShowAccuracyZoom = showAccuracyZoom;
|
||||||
}
|
}
|
||||||
@ -234,7 +241,15 @@ public class LocationRenderer extends LayerRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean init() {
|
private boolean init() {
|
||||||
int shader = GLShader.createProgram(vShaderStr, fShaderStr);
|
int shader = 0;
|
||||||
|
switch (mShader) {
|
||||||
|
case SHADER_1:
|
||||||
|
shader = GLShader.createProgram(vShaderStr, fShaderStr1);
|
||||||
|
break;
|
||||||
|
case SHADER_2:
|
||||||
|
shader = GLShader.createProgram(vShaderStr, fShaderStr2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (shader == 0)
|
if (shader == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -248,7 +263,7 @@ public class LocationRenderer extends LayerRenderer {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final static String vShaderStr = ""
|
private static final String vShaderStr = ""
|
||||||
+ "precision mediump float;"
|
+ "precision mediump float;"
|
||||||
+ "uniform mat4 u_mvp;"
|
+ "uniform mat4 u_mvp;"
|
||||||
+ "uniform float u_phase;"
|
+ "uniform float u_phase;"
|
||||||
@ -260,7 +275,7 @@ public class LocationRenderer extends LayerRenderer {
|
|||||||
+ " v_tex = a_pos;"
|
+ " v_tex = a_pos;"
|
||||||
+ "}";
|
+ "}";
|
||||||
|
|
||||||
private final static String fShaderStr = ""
|
private static final String fShaderStr1 = ""
|
||||||
+ "precision mediump float;"
|
+ "precision mediump float;"
|
||||||
+ "varying vec2 v_tex;"
|
+ "varying vec2 v_tex;"
|
||||||
+ "uniform float u_scale;"
|
+ "uniform float u_scale;"
|
||||||
@ -289,30 +304,30 @@ public class LocationRenderer extends LayerRenderer {
|
|||||||
+ " gl_FragColor = vec4(0.2, 0.2, 0.8, 1.0) * a;"
|
+ " gl_FragColor = vec4(0.2, 0.2, 0.8, 1.0) * a;"
|
||||||
+ "}}";
|
+ "}}";
|
||||||
|
|
||||||
//private final static String fShaderStr = ""
|
private static final String fShaderStr2 = ""
|
||||||
// + "precision mediump float;"
|
+ "precision mediump float;"
|
||||||
// + "varying vec2 v_tex;"
|
+ "varying vec2 v_tex;"
|
||||||
// + "uniform float u_scale;"
|
+ "uniform float u_scale;"
|
||||||
// + "uniform float u_phase;"
|
+ "uniform float u_phase;"
|
||||||
// + "uniform vec2 u_dir;"
|
+ "uniform vec2 u_dir;"
|
||||||
// + "void main() {"
|
+ "void main() {"
|
||||||
// + " float len = 1.0 - length(v_tex);"
|
+ " float len = 1.0 - length(v_tex);"
|
||||||
// /// outer ring
|
/// outer ring
|
||||||
// + " float a = smoothstep(0.0, 2.0 / u_scale, len);"
|
+ " float a = smoothstep(0.0, 2.0 / u_scale, len);"
|
||||||
// /// inner ring
|
/// inner ring
|
||||||
// + " float b = 0.8 * smoothstep(3.0 / u_scale, 4.0 / u_scale, len);"
|
+ " float b = 0.8 * smoothstep(3.0 / u_scale, 4.0 / u_scale, len);"
|
||||||
// /// center point
|
/// center point
|
||||||
// + " float c = 0.5 * (1.0 - smoothstep(14.0 / u_scale, 16.0 / u_scale, 1.0 - len));"
|
+ " float c = 0.5 * (1.0 - smoothstep(14.0 / u_scale, 16.0 / u_scale, 1.0 - len));"
|
||||||
// + " vec2 dir = normalize(v_tex);"
|
+ " vec2 dir = normalize(v_tex);"
|
||||||
// + " float d = dot(dir, u_dir); "
|
+ " float d = dot(dir, u_dir); "
|
||||||
// /// 0.5 width of viewshed
|
/// 0.5 width of viewshed
|
||||||
// + " d = clamp(smoothstep(0.7, 0.7 + 2.0/u_scale, d) * len, 0.0, 1.0);"
|
+ " d = clamp(smoothstep(0.7, 0.7 + 2.0/u_scale, d) * len, 0.0, 1.0);"
|
||||||
// /// - subtract inner from outer to create the outline
|
/// - subtract inner from outer to create the outline
|
||||||
// /// - multiply by viewshed
|
/// - multiply by viewshed
|
||||||
// /// - add center point
|
/// - add center point
|
||||||
// + " a = max(d, (a - (b + c)) + c);"
|
+ " a = max(d, (a - (b + c)) + c);"
|
||||||
// + " gl_FragColor = vec4(0.2, 0.2, 0.8, 1.0) * a;"
|
+ " gl_FragColor = vec4(0.2, 0.2, 0.8, 1.0) * a;"
|
||||||
// + "}";
|
+ "}";
|
||||||
|
|
||||||
public interface Callback {
|
public interface Callback {
|
||||||
float getRotation();
|
float getRotation();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user