Tue, 28 Oct 2025 22:03:06 +0100
fix that dependencies for tools are always checked
| 173 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 1 | |
| 16 
c5dde81b6fb2
add text rendering and demo FPS counter
 Mike Becker <universe@uap-core.de> parents: 
15diff
changeset | 2 | 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 | 3 | in vec2 uvcoord; | 
| 15 
362b7659dc76
add shader loading and unloading
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 4 | |
| 173 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 5 | uniform vec2 radii; | 
| 159 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 6 | #ifdef FILL | 
| 151 
42960d0c879b
adds first basic rectangle shader
 Mike Becker <universe@uap-core.de> parents: 
137diff
changeset | 7 | uniform vec4 color; | 
| 159 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 8 | #endif | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 9 | #ifdef BORDER | 
| 151 
42960d0c879b
adds first basic rectangle shader
 Mike Becker <universe@uap-core.de> parents: 
137diff
changeset | 10 | uniform float thickness; | 
| 159 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 11 | 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 | 12 | #endif | 
| 15 
362b7659dc76
add shader loading and unloading
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 13 | |
| 
362b7659dc76
add shader loading and unloading
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 14 | void main(void) { | 
| 173 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 15 | // Calculate center of the ellipse | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 16 | vec2 center = radii; | 
| 158 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 17 | |
| 173 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 18 | // Calculate position relative to center | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 19 | vec2 pos = uvcoord - center; | 
| 158 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 20 | |
| 173 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 21 | // For an ellipse, we need to calculate normalized distance based on the formula: | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 22 | // (x/a)² + (y/b)² = 1 where a and b are the semi-axes | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 23 | vec2 normalized = pos / center; | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 24 | |
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 25 | // Calculate squared distance in ellipse space | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 26 | // Value = 1.0 exactly at the ellipse boundary | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 27 | float dist_squared = dot(normalized, normalized); | 
| 158 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 28 | |
| 159 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 29 | #ifndef BORDER | 
| 173 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 30 | // For filled ellipse | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 31 | if (dist_squared > 1.0) { | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 32 | discard; // Outside the ellipse | 
| 158 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 33 | } | 
| 151 
42960d0c879b
adds first basic rectangle shader
 Mike Becker <universe@uap-core.de> parents: 
137diff
changeset | 34 | diffuse = color; | 
| 173 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 35 | #else // BORDER | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 36 | // For outlined ellipse | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 37 | // Calculate inner border threshold based on thickness | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 38 | // We need to determine the inner ellipse boundary | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 39 | float border_ratio = thickness / min(center.x, center.y); | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 40 | |
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 41 | // The inner ellipse has a smaller radius but follows the same equation | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 42 | // We need to calculate what normalized value corresponds to the inner ellipse | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 43 | float inner_threshold = 1.0 - border_ratio; | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 44 | inner_threshold = inner_threshold * inner_threshold; // Square it because we're comparing to dist_squared | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 45 | |
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 46 | if (dist_squared > 1.0) { | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 47 | discard; // Outside the ellipse | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 48 | } else if (dist_squared > inner_threshold) { | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 49 | // In the border region | 
| 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 50 | diffuse = border_color; | 
| 158 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 51 | } else { | 
| 159 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 52 | // Inside the outline | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 53 | #ifdef FILL | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 54 | diffuse = color; | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 55 | #else | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 56 | discard; | 
| 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 57 | #endif | 
| 158 
f650994ec543
implement rounded corners
 Mike Becker <universe@uap-core.de> parents: 
157diff
changeset | 58 | } | 
| 159 
da7ebfcdd159
add combination of filled rectangle with a border
 Mike Becker <universe@uap-core.de> parents: 
158diff
changeset | 59 | #endif // BORDER | 
| 173 
bd57fe3f6360
add ellipsis shader - resolves #385
 Mike Becker <universe@uap-core.de> parents: 
159diff
changeset | 60 | } |