Thu, 03 Jul 2025 23:01:52 +0200
add asc_behavior_remove()
173
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
1 | |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
15
diff
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:
50
diff
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:
159
diff
changeset
|
5 | uniform vec2 radii; |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
6 | #ifdef FILL |
151
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
137
diff
changeset
|
7 | uniform vec4 color; |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
8 | #endif |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
9 | #ifdef BORDER |
151
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
137
diff
changeset
|
10 | uniform float thickness; |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
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:
135
diff
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:
159
diff
changeset
|
15 | // Calculate center of the ellipse |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
16 | vec2 center = radii; |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
17 | |
173
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
18 | // Calculate position relative to center |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
19 | vec2 pos = uvcoord - center; |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
20 | |
173
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
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:
159
diff
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:
159
diff
changeset
|
23 | vec2 normalized = pos / center; |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
24 | |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
25 | // Calculate squared distance in ellipse space |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
26 | // Value = 1.0 exactly at the ellipse boundary |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
27 | float dist_squared = dot(normalized, normalized); |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
28 | |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
29 | #ifndef BORDER |
173
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
30 | // For filled ellipse |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
31 | if (dist_squared > 1.0) { |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
32 | discard; // Outside the ellipse |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
33 | } |
151
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
137
diff
changeset
|
34 | diffuse = color; |
173
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
35 | #else // BORDER |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
36 | // For outlined ellipse |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
37 | // Calculate inner border threshold based on thickness |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
38 | // We need to determine the inner ellipse boundary |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
39 | float border_ratio = thickness / min(center.x, center.y); |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
40 | |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
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:
159
diff
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:
159
diff
changeset
|
43 | float inner_threshold = 1.0 - border_ratio; |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
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:
159
diff
changeset
|
45 | |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
46 | if (dist_squared > 1.0) { |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
47 | discard; // Outside the ellipse |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
48 | } else if (dist_squared > inner_threshold) { |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
49 | // In the border region |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
50 | diffuse = border_color; |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
51 | } else { |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
52 | // Inside the outline |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
53 | #ifdef FILL |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
54 | diffuse = color; |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
55 | #else |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
56 | discard; |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
57 | #endif |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
157
diff
changeset
|
58 | } |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
59 | #endif // BORDER |
173
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
60 | } |