Wed, 02 Jul 2025 23:21:17 +0200
resolve TODOs regarding input.h
a) mouse position must be integer, because it can be negative (though rarely)
b) we should not trade "access complexity" for space in the scancodes array
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
15
diff
changeset
|
1 | layout(location = 0) out vec4 diffuse; |
88
6234b7ea48f3
add support for 2d textures in sprite shader - fixes #386
Mike Becker <universe@uap-core.de>
parents:
50
diff
changeset
|
2 | in vec2 uvcoord; |
15
362b7659dc76
add shader loading and unloading
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
3 | |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
4 | uniform vec2 size; |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
5 | #ifdef FILL |
151
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
137
diff
changeset
|
6 | uniform vec4 color; |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
7 | #endif |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
8 | #ifdef BORDER |
151
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
137
diff
changeset
|
9 | uniform float thickness; |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
10 | uniform vec4 border_color; |
137
f8e6e0ae61a8
remove pre-defined dummy textures by introducing conditional compilation for shaders
Mike Becker <universe@uap-core.de>
parents:
135
diff
changeset
|
11 | #endif |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
12 | #ifdef ROUNDED_CORNERS |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
13 | uniform float radius; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
14 | #endif |
15
362b7659dc76
add shader loading and unloading
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
15 | |
362b7659dc76
add shader loading and unloading
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
16 | void main(void) { |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
17 | #ifdef ROUNDED_CORNERS |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
18 | // Calculate distances from each corner |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
19 | vec2 corner_distances[4]; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
20 | corner_distances[0] = uvcoord - vec2(radius, radius); // top-left |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
21 | corner_distances[1] = uvcoord - vec2(size.x - radius, radius); // top-right |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
22 | corner_distances[2] = uvcoord - vec2(radius, size.y - radius); // bottom-left |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
23 | corner_distances[3] = uvcoord - vec2(size.x - radius, size.y - radius); // bottom-right |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
24 | |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
25 | // Check if we're in a corner region |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
26 | bool in_corner_region = false; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
27 | int corner_idx = -1; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
28 | |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
29 | for (int i = 0; i < 4; i++) { |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
30 | vec2 test_point = corner_distances[i]; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
31 | vec2 corner_test = vec2(0.0); |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
32 | |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
33 | if (i == 0 && test_point.x < 0.0 && test_point.y < 0.0) { // top-left |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
34 | corner_test = test_point; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
35 | corner_idx = i; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
36 | in_corner_region = true; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
37 | break; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
38 | } else if (i == 1 && test_point.x > 0.0 && test_point.y < 0.0) { // top-right |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
39 | corner_test = test_point; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
40 | corner_idx = i; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
41 | in_corner_region = true; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
42 | break; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
43 | } else if (i == 2 && test_point.x < 0.0 && test_point.y > 0.0) { // bottom-left |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
44 | corner_test = test_point; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
45 | corner_idx = i; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
46 | in_corner_region = true; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
47 | break; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
48 | } else if (i == 3 && test_point.x > 0.0 && test_point.y > 0.0) { // bottom-right |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
49 | corner_test = test_point; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
50 | corner_idx = i; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
51 | in_corner_region = true; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
52 | break; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
53 | } |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
54 | } |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
55 | |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
56 | #ifndef BORDER |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
57 | // For filled rectangle with rounded corners |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
58 | if (in_corner_region) { |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
59 | float dist = length(corner_distances[corner_idx]); |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
60 | if (dist > radius) { |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
61 | discard; // Outside the rounded corner |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
62 | } |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
63 | } else if (uvcoord.x < 0.0 || uvcoord.y < 0.0 || uvcoord.x > size.x || uvcoord.y > size.y) { |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
64 | // TODO: at the moment we don't have fragments here, but we will with glow |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
65 | discard; // Outside the rectangle |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
66 | } |
151
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
137
diff
changeset
|
67 | diffuse = color; |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
68 | #else // BORDER |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
69 | // For outlined rectangle with rounded corners |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
70 | if (in_corner_region) { |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
71 | float dist = length(corner_distances[corner_idx]); |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
72 | if (dist > radius) { |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
73 | discard; // Outside the rounded corner |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
74 | } else if (dist < radius - thickness) { |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
75 | // Inside the outline |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
76 | #ifdef FILL |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
77 | diffuse = color; |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
78 | #else |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
79 | discard; |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
80 | #endif |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
81 | } else { |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
82 | // the corner outline |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
83 | diffuse = border_color; |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
84 | } |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
85 | } else if (any(lessThan(uvcoord, vec2(thickness))) || any(greaterThan(uvcoord, size - thickness))) { |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
86 | // On a straight edge |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
87 | if (uvcoord.x >= 0.0 && uvcoord.y >= 0.0 && uvcoord.x <= size.x && uvcoord.y <= size.y) { |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
88 | diffuse = border_color; |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
89 | } else { |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
90 | discard; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
91 | } |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
92 | } else { |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
93 | // Inside the outline |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
94 | #ifdef FILL |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
95 | diffuse = color; |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
96 | #else |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
97 | discard; |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
98 | #endif |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
99 | } |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
100 | #endif // BORDER |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
101 | #else // no ROUNDED_CORNERS |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
102 | #ifdef BORDER |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
103 | if (any(notEqual(1.0-step(thickness, uvcoord)+step(size-thickness, uvcoord), vec2(0.0)))) { |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
104 | diffuse = border_color; |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
105 | } else { |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
106 | // Inside the outline |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
107 | #ifdef FILL |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
108 | diffuse = color; |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
109 | #else |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
110 | discard; |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
111 | #endif |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
112 | } |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
113 | #else // no BORDER |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
114 | diffuse = color; |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
115 | #endif // BORDER |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
116 | #endif // ROUNDED_CORNERS |
15
362b7659dc76
add shader loading and unloading
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
117 | } |