Tue, 28 Oct 2025 22:03:06 +0100
fix that dependencies for tools are always checked
| 16 
c5dde81b6fb2
add text rendering and demo FPS counter
 Mike Becker <universe@uap-core.de> parents: 
15diff
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: 
50diff
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: 
158diff
changeset | 4 | uniform vec2 size; | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 5 | #ifdef FILL | 
| 151 
42960d0c879b
adds first basic rectangle shader
 Mike Becker <universe@uap-core.de> parents: 
137diff
changeset | 6 | uniform vec4 color; | 
| 159 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 7 | #endif | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 8 | #ifdef BORDER | 
| 151 
42960d0c879b
adds first basic rectangle shader
 Mike Becker <universe@uap-core.de> parents: 
137diff
changeset | 9 | uniform float thickness; | 
| 159 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
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: 
135diff
changeset | 11 | #endif | 
| 158 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 12 | #ifdef ROUNDED_CORNERS | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 13 | uniform float radius; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
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: 
157diff
changeset | 17 | #ifdef ROUNDED_CORNERS | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 18 | // Calculate distances from each corner | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 19 | vec2 corner_distances[4]; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 20 | corner_distances[0] = uvcoord - vec2(radius, radius); // top-left | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 21 | corner_distances[1] = uvcoord - vec2(size.x - radius, radius); // top-right | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 22 | corner_distances[2] = uvcoord - vec2(radius, size.y - radius); // bottom-left | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
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: 
157diff
changeset | 24 | |
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 25 | // Check if we're in a corner region | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 26 | bool in_corner_region = false; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 27 | int corner_idx = -1; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 28 | |
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 29 | for (int i = 0; i < 4; i++) { | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 30 | vec2 test_point = corner_distances[i]; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 31 | vec2 corner_test = vec2(0.0); | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 32 | |
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
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: 
157diff
changeset | 34 | corner_test = test_point; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 35 | corner_idx = i; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 36 | in_corner_region = true; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 37 | break; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
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: 
157diff
changeset | 39 | corner_test = test_point; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 40 | corner_idx = i; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 41 | in_corner_region = true; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 42 | break; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
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: 
157diff
changeset | 44 | corner_test = test_point; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 45 | corner_idx = i; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 46 | in_corner_region = true; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 47 | break; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
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: 
157diff
changeset | 49 | corner_test = test_point; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 50 | corner_idx = i; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 51 | in_corner_region = true; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 52 | break; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 53 | } | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 54 | } | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 55 | |
| 159 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 56 | #ifndef BORDER | 
| 158 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 57 | // For filled rectangle with rounded corners | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 58 | if (in_corner_region) { | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 59 | float dist = length(corner_distances[corner_idx]); | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 60 | if (dist > radius) { | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 61 | discard; // Outside the rounded corner | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 62 | } | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
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: 
158diff
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: 
157diff
changeset | 65 | discard; // Outside the rectangle | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 66 | } | 
| 151 
42960d0c879b
adds first basic rectangle shader
 Mike Becker <universe@uap-core.de> parents: 
137diff
changeset | 67 | diffuse = color; | 
| 159 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 68 | #else // BORDER | 
| 158 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 69 | // For outlined rectangle with rounded corners | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 70 | if (in_corner_region) { | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 71 | float dist = length(corner_distances[corner_idx]); | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 72 | if (dist > radius) { | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 73 | discard; // Outside the rounded corner | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 74 | } else if (dist < radius - thickness) { | 
| 159 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 75 | // Inside the outline | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 76 | #ifdef FILL | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 77 | diffuse = color; | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 78 | #else | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 79 | discard; | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 80 | #endif | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 81 | } else { | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 82 | // the corner outline | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 83 | diffuse = border_color; | 
| 158 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 84 | } | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
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: 
157diff
changeset | 86 | // On a straight edge | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
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: 
158diff
changeset | 88 | diffuse = border_color; | 
| 158 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 89 | } else { | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 90 | discard; | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 91 | } | 
| 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 92 | } else { | 
| 159 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 93 | // Inside the outline | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 94 | #ifdef FILL | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 95 | diffuse = color; | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 96 | #else | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 97 | discard; | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 98 | #endif | 
| 158 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 99 | } | 
| 159 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 100 | #endif // BORDER | 
| 158 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 101 | #else // no ROUNDED_CORNERS | 
| 159 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 102 | #ifdef BORDER | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
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: 
158diff
changeset | 104 | diffuse = border_color; | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 105 | } else { | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 106 | // Inside the outline | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 107 | #ifdef FILL | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 108 | diffuse = color; | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 109 | #else | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 110 | discard; | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 111 | #endif | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 112 | } | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 113 | #else // no BORDER | 
| 158 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 114 | diffuse = color; | 
| 159 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 115 | #endif // BORDER | 
| 158 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 116 | #endif // ROUNDED_CORNERS | 
| 15 
362b7659dc76
add shader loading and unloading
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 117 | } |