implemented SDL3 as an option for window manager

This commit is contained in:
2026-03-23 19:00:56 +01:00
parent 226f60e9ae
commit a596028ed9
152 changed files with 84309 additions and 247 deletions

View File

@@ -0,0 +1,80 @@
#pragma once
inline const char* vertD = R"(
#version 330 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec4 color;
uniform mat4 prMatrix;
uniform mat4 camMatrix;
out DATA
{
vec4 color_out;
} vs_out;
void main()
{
gl_Position = prMatrix * camMatrix * vec4(position, 1.0);
vs_out.color_out = color;
}
)";
inline const char* fragD = R"(
#version 330 core
layout (location = 0) out vec4 color;
in DATA
{
vec4 color_out;
} fs_in;
// 8x8 Bayer-Matrix (0..63), als Schwellwerttabelle
float bayer8(vec2 fragXY)
{
int x = int(mod(fragXY.x, 8.0));
int y = int(mod(fragXY.y, 8.0));
int idx = x + y * 8;
// Werte aus klassischer 8x8 Ordered-Dithering-Matrix
int m[64] = int[64](
0, 48, 12, 60, 3, 51, 15, 63,
32, 16, 44, 28, 35, 19, 47, 31,
8, 56, 4, 52, 11, 59, 7, 55,
40, 24, 36, 20, 43, 27, 39, 23,
2, 50, 14, 62, 1, 49, 13, 61,
34, 18, 46, 30, 33, 17, 45, 29,
10, 58, 6, 54, 9, 57, 5, 53,
42, 26, 38, 22, 41, 25, 37, 21
);
// +0.5, damit die Schwellen mittig zwischen Stufen liegen
return (float(m[idx]) + 0.5) / 64.0;
}
void main()
{
vec4 c = fs_in.color_out;
// alpha == 0 -> nichts rendern
if (c.a <= 0.0)
discard;
// Für alpha < 1 verwenden wir Ordered Dithering
if (c.a < 1.0)
{
float threshold = bayer8(gl_FragCoord.xy);
// ist der Schwellenwert größer als alpha? -> Pixel auslassen
if (threshold > c.a)
discard;
}
// Wenn wir bis hier nicht verworfen haben, zeichnen wir den Pixel.
// Typischerweise setzt man die ausgegebene Alpha dann auf 1.0,
// weil die Transparenz bereits über das Dithering realisiert wurde.
color = vec4(c.rgb, 1.0);
}
)";