aboutsummaryrefslogtreecommitdiff
path: root/.config/hypr/shaders/15_anaglyph_3d.glsl
blob: 8294e31e61759f07c171d68b9f378cf1904b7fa0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#version 300 es
// Anaglyph 3D Shader - OPTIMIZED
// Fixes: Edge clamping, alpha preservation, depth-aware separation

precision highp float;

in vec2 v_texcoord;
uniform sampler2D tex;
out vec4 fragColor;

// --- CONFIGURATION ---
const float SEPARATION = 0.003;
// Make separation stronger at edges (simulates depth from screen curvature)
const bool DEPTH_AWARE = true;

void main() {
    vec2 offset = vec2(SEPARATION, 0.0);
    
    // Optional: Increase separation toward screen edges for more depth
    if (DEPTH_AWARE) {
        float edgeFactor = abs(v_texcoord.x - 0.5) * 2.0; // 0 at center, 1 at edges
        offset.x *= 1.0 + edgeFactor * 0.5;
    }
    
    // Clamp coordinates to prevent edge sampling artifacts
    vec2 leftCoord = clamp(v_texcoord - offset, 0.0, 1.0);
    vec2 rightCoord = clamp(v_texcoord + offset, 0.0, 1.0);
    
    vec4 leftEye = texture(tex, leftCoord);
    vec4 rightEye = texture(tex, rightCoord);
    vec4 center = texture(tex, v_texcoord);
    
    // Combine: Red from left, Cyan (GB) from right
    fragColor = vec4(leftEye.r, rightEye.g, rightEye.b, center.a);
}