Skip to content

Commit 9905174

Browse files
committed
add basic antialiasing
1 parent 77b3417 commit 9905174

File tree

1 file changed

+17
-33
lines changed

1 file changed

+17
-33
lines changed

src/shaders/grid.frag

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -20,54 +20,38 @@ vec3 grid(vec2 position, float scale, float thickness, float level) {
2020
const float base_line_width = thickness;
2121
position += base_line_width / scale / 2.0;
2222
vec2 grid_pos = mod(position, level);
23-
vec2 grid_point = step(grid_pos, vec2(base_line_width / scale)); // ensures constant line size, which I don't want...
24-
float grid = min(1.0, grid_point.x + grid_point.y); // float(grid_point.x != 0.0 || grid_point.y != 0.0)
23+
vec2 derivative = fwidth(grid_pos);
24+
vec2 grid_point = smoothstep(grid_pos - derivative, grid_pos, vec2(base_line_width / scale)); // ensures constant line size
25+
float grid = min(1.0, grid_point.x + grid_point.y);
2526
vec3 col = vec3(grid);
26-
if (abs(position.x) < base_line_width / scale) {
27-
col = vec3(0.0, 1.0, 0.0); // green at x=0
28-
}
29-
if (abs(position.y) < base_line_width / scale) {
30-
col = vec3(1.0, 0.0, 0.0); // red at y=0
31-
}
3227
return col;
3328
}
3429

3530

3631
void main() {
37-
const float logscale = 5.0;
32+
const float LOGSCALE = 5.0;
33+
const float MAX_LINE_THICKNESS = 0.010;
3834

3935
vec2 offset = (inverse(camera.view_proj) * vec4(uv * 2 - 1, 0.0, 1.0)).xy; // TODO: optimize
40-
vec2 derivative = fwidth(offset);
4136

42-
float grid_level = log(pan_and_zoom.zoom) / log(logscale) + 3.0 + 1.20; // [0, 4] for zoom [0.001, 10]
37+
float grid_level = log(pan_and_zoom.zoom) / log(LOGSCALE) + 3.0 + 1.20; // [0, 4] for zoom [0.001, 10] + 1.2 for styling
4338
uint grid_floor = uint(floor(grid_level));
4439
uint grid_ceil = uint(ceil(grid_level));
4540
float t = grid_level - float(grid_floor);
46-
//t = t*t;//pow(t,t); // slightly more aggressive fadein
4741

48-
float thickness0 = (1.0 - t) * 0.010;
49-
float thickness1 = (t) * 0.010;
50-
float scale0 = pow(logscale, 3.0 - grid_floor);
51-
float scale1 = scale0 / logscale;
42+
float thickness0 = (1.0 - t) * MAX_LINE_THICKNESS;
43+
float thickness1 = (t) * MAX_LINE_THICKNESS;
44+
float scale0 = pow(LOGSCALE, 3.0 - grid_floor);
45+
float scale1 = scale0 / LOGSCALE;
5246
vec3 col0 = grid(offset, pan_and_zoom.zoom, thickness0, scale0);
53-
//if (col0 == vec3(1.0)){
54-
// col0 = vec3(1,0,0);
55-
//}
5647
vec3 col1 = grid(offset, pan_and_zoom.zoom, thickness1, scale1);
57-
//if (col1 == vec3(1.0)) {
58-
// col1 = vec3(0,1,0);
59-
//}
6048
vec3 col = mix(col0, col1, t);
61-
62-
//vec3 col0 = grid(offset, pan_and_zoom.zoom, 0.005, 100); // grid valid for zoom ~0.001 (unused..?) 0
63-
//vec3 col1 = grid(offset, pan_and_zoom.zoom, 0.005, 10); // grid valid for zoom ~0.01 1
64-
//vec3 col2 = grid(offset, pan_and_zoom.zoom, 0.005, 1); // grid valid for zoom ~0.1 2
65-
//vec3 col3 = grid(offset, pan_and_zoom.zoom, 0.005, 0.1); // grid valid for zoom ~1 3
66-
//vec3 col4 = grid(offset, pan_and_zoom.zoom, 0.005, 0.01); // grid valid for zoom ~10 4
67-
//vec3 grids[5] = {col0, col1, col2, col3, col4};
68-
69-
//vec3 col = mix(grids[grid_floor], grids[grid_ceil], t);
70-
71-
49+
float thickness = max(thickness0, thickness1);
50+
if (abs(offset.x) < thickness / pan_and_zoom.zoom) {
51+
col.rb = vec2(0.0);
52+
}
53+
if (abs(offset.y) < thickness / pan_and_zoom.zoom) {
54+
col.gb = vec2(0.0);
55+
}
7256
out_FragColor = vec4(col, 1.0);
7357
}

0 commit comments

Comments
 (0)