Circles (GL points) stroke #268
This commit is contained in:
parent
7acbea88cc
commit
61b8233b97
@ -62,7 +62,9 @@ public class CircleTest extends GdxMap {
|
|||||||
|
|
||||||
CircleStyle cs = CircleStyle.builder()
|
CircleStyle cs = CircleStyle.builder()
|
||||||
.radius(30)
|
.radius(30)
|
||||||
.color(0xff00ff00)
|
.color(Color.MAGENTA)
|
||||||
|
.strokeWidth(6)
|
||||||
|
.strokeColor(Color.WHITE)
|
||||||
.build();
|
.build();
|
||||||
CircleBucket cb = renderer.buckets.addCircleBucket(0, cs);
|
CircleBucket cb = renderer.buckets.addCircleBucket(0, cs);
|
||||||
addCircle(200, -200, cb);
|
addCircle(200, -200, cb);
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
precision highp float;
|
precision highp float;
|
||||||
#endif
|
#endif
|
||||||
uniform mat4 u_mvp;
|
uniform mat4 u_mvp;
|
||||||
uniform float u_scale;
|
uniform float u_radius;
|
||||||
attribute vec2 a_pos;
|
attribute vec2 a_pos;
|
||||||
void main() {
|
void main() {
|
||||||
gl_Position = u_mvp * vec4(a_pos, 0.0, 1.0);
|
gl_Position = u_mvp * vec4(a_pos, 0.0, 1.0);
|
||||||
gl_PointSize = 2.0 * u_scale / gl_Position.z;
|
gl_PointSize = 2.0 * u_radius / gl_Position.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
$$
|
$$
|
||||||
@ -17,11 +17,16 @@ $$
|
|||||||
#ifdef GLES
|
#ifdef GLES
|
||||||
precision highp float;
|
precision highp float;
|
||||||
#endif
|
#endif
|
||||||
uniform vec4 u_color;
|
uniform vec4 u_fill;
|
||||||
|
uniform float u_radius;
|
||||||
|
uniform vec4 u_stroke;
|
||||||
|
uniform float u_width;
|
||||||
void main() {
|
void main() {
|
||||||
vec2 cxy = 2.0 * gl_PointCoord - 1.0;
|
vec2 cxy = 2.0 * gl_PointCoord - 1.0;
|
||||||
float r = dot(cxy, cxy);
|
float r = dot(cxy, cxy);
|
||||||
float delta = fwidth(r);
|
float delta = fwidth(r);
|
||||||
float alpha = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);
|
float alpha = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);
|
||||||
gl_FragColor = u_color * alpha;
|
float edge = 1.0 - u_width / u_radius;
|
||||||
|
float stroke = 1.0 - smoothstep(edge - delta, edge + delta, r);
|
||||||
|
gl_FragColor = mix(u_stroke, u_fill, stroke) * alpha;
|
||||||
}
|
}
|
||||||
|
@ -14,9 +14,11 @@ $$
|
|||||||
#ifdef GLES
|
#ifdef GLES
|
||||||
precision highp float;
|
precision highp float;
|
||||||
#endif
|
#endif
|
||||||
uniform vec4 u_color;
|
uniform vec4 u_fill;
|
||||||
uniform float u_scale;
|
uniform float u_radius;
|
||||||
|
uniform vec4 u_stroke;
|
||||||
|
uniform float u_width;
|
||||||
varying vec2 v_pos;
|
varying vec2 v_pos;
|
||||||
void main() {
|
void main() {
|
||||||
gl_FragColor = u_color;
|
gl_FragColor = u_fill;
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ public class CircleBucket extends RenderBucket {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static class Shader extends GLShader {
|
public static class Shader extends GLShader {
|
||||||
int uMVP, uColor, uScale, aPos;
|
int uMVP, uFill, uRadius, uStroke, uWidth, aPos;
|
||||||
|
|
||||||
Shader(String shaderFile) {
|
Shader(String shaderFile) {
|
||||||
if (!GLAdapter.CIRCLE_QUADS)
|
if (!GLAdapter.CIRCLE_QUADS)
|
||||||
@ -106,8 +106,10 @@ public class CircleBucket extends RenderBucket {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
uMVP = getUniform("u_mvp");
|
uMVP = getUniform("u_mvp");
|
||||||
uColor = getUniform("u_color");
|
uFill = getUniform("u_fill");
|
||||||
uScale = getUniform("u_scale");
|
uRadius = getUniform("u_radius");
|
||||||
|
uStroke = getUniform("u_stroke");
|
||||||
|
uWidth = getUniform("u_width");
|
||||||
aPos = getAttrib("a_pos");
|
aPos = getAttrib("a_pos");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,8 +132,10 @@ public class CircleBucket extends RenderBucket {
|
|||||||
CircleBucket cb = (CircleBucket) b;
|
CircleBucket cb = (CircleBucket) b;
|
||||||
CircleStyle circle = cb.circle.current();
|
CircleStyle circle = cb.circle.current();
|
||||||
|
|
||||||
GLUtils.setColor(s.uColor, circle.fillColor, 1);
|
GLUtils.setColor(s.uFill, circle.fillColor, 1);
|
||||||
gl.uniform1f(s.uScale, circle.radius);
|
gl.uniform1f(s.uRadius, circle.radius);
|
||||||
|
GLUtils.setColor(s.uStroke, circle.strokeColor, 1);
|
||||||
|
gl.uniform1f(s.uWidth, circle.strokeWidth);
|
||||||
|
|
||||||
gl.vertexAttribPointer(s.aPos, 2, GL.SHORT,
|
gl.vertexAttribPointer(s.aPos, 2, GL.SHORT,
|
||||||
false, 0, cb.vertexOffset);
|
false, 0, cb.vertexOffset);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user