|
@@ -1,33 +1,35 @@
|
|
|
function lovr.load()
|
|
function lovr.load()
|
|
|
shader = lovr.graphics.newShader([[
|
|
shader = lovr.graphics.newShader([[
|
|
|
|
|
+ out vec2 scale;
|
|
|
|
|
+
|
|
|
vec4 lovrmain() {
|
|
vec4 lovrmain() {
|
|
|
|
|
+ scale = vec2(length(Transform[0]), length(Transform[1]));
|
|
|
return DefaultPosition;
|
|
return DefaultPosition;
|
|
|
}
|
|
}
|
|
|
]], [[
|
|
]], [[
|
|
|
- const float gridSize = 25.;
|
|
|
|
|
- const float cellSize = .5;
|
|
|
|
|
-
|
|
|
|
|
- vec4 lovrmain() {
|
|
|
|
|
- vec2 uv = UV;
|
|
|
|
|
|
|
+ uniform float lineWidth;
|
|
|
|
|
|
|
|
- // Distance-based alpha (1. at the middle, 0. at edges)
|
|
|
|
|
- float alpha = 1. - smoothstep(.15, .50, distance(uv, vec2(.5)));
|
|
|
|
|
|
|
+ in vec2 scale;
|
|
|
|
|
|
|
|
- // Grid coordinate
|
|
|
|
|
- uv *= gridSize;
|
|
|
|
|
- uv /= cellSize;
|
|
|
|
|
- vec2 c = abs(fract(uv - .5) - .5) / fwidth(uv);
|
|
|
|
|
- float line = clamp(1. - min(c.x, c.y), 0., 1.);
|
|
|
|
|
- vec3 value = mix(vec3(.01, .01, .011), (vec3(.04)), line);
|
|
|
|
|
-
|
|
|
|
|
- return vec4(vec3(value), alpha);
|
|
|
|
|
|
|
+ // https://bgolus.medium.com/the-best-darn-grid-shader-yet-727f9278b9d8
|
|
|
|
|
+ vec4 lovrmain() {
|
|
|
|
|
+ vec2 uv = (UV - 1.) * scale;
|
|
|
|
|
+ vec4 uvDDXY = vec4(dFdx(uv), dFdy(uv));
|
|
|
|
|
+ vec2 uvDeriv = vec2(length(uvDDXY.xz), length(uvDDXY.yw));
|
|
|
|
|
+ vec2 drawWidth = clamp(vec2(lineWidth), uvDeriv, vec2(.5));
|
|
|
|
|
+ vec2 lineAA = uvDeriv * 1.5;
|
|
|
|
|
+ vec2 gridUV = 1.0 - abs(fract(uv) * 2. - 1.);
|
|
|
|
|
+ vec2 grid2 = smoothstep(lineWidth + lineAA, lineWidth - lineAA, gridUV);
|
|
|
|
|
+ grid2 *= clamp(lineWidth / drawWidth, 0., 1.);
|
|
|
|
|
+ grid2 = mix(grid2, vec2(lineWidth), clamp(uvDeriv * 2. - 1., 0., 1.));
|
|
|
|
|
+ float grid = mix(grid2.x, 1., grid2.y);
|
|
|
|
|
+ return vec4(Color.rgb * grid, Color.a);
|
|
|
}
|
|
}
|
|
|
- ]], { flags = { highp = true } })
|
|
|
|
|
-
|
|
|
|
|
- lovr.graphics.setBackgroundColor(.05, .05, .05)
|
|
|
|
|
|
|
+ ]])
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
function lovr.draw(pass)
|
|
function lovr.draw(pass)
|
|
|
pass:setShader(shader)
|
|
pass:setShader(shader)
|
|
|
- pass:plane(0, 0, 0, 25, 25, -math.pi / 2, 1, 0, 0)
|
|
|
|
|
|
|
+ pass:send('lineWidth', .05)
|
|
|
|
|
+ pass:plane(0, 0, 0, 50, 50, -math.pi / 2, 1, 0, 0)
|
|
|
end
|
|
end
|