Files
openroller/apps/desktop/shaders/line.frag
T
tsuki 831d96e562 Initial public source release
Split reusable rendering and format support into vectorail-core and vectorail-gc.
2026-08-02 17:05:27 +02:00

40 lines
1.1 KiB
GLSL

#version 450 core
in float vSide;
in float vDist;
in float vTrackTimeMs;
out vec4 FragColor;
uniform vec3 uColor;
uniform vec3 uBehindColor;
uniform bool uIsAvatar;
uniform bool uClipTrack;
uniform float uCurrentTimeMs;
uniform float uDrawBehindMs;
uniform float uDrawAheadMs;
uniform float uAlpha;
void main() {
float dist = abs(vSide);
// Мягкий туман: трасса видна очень далеко
float fog = exp(-vDist * 0.001);
if (uClipTrack &&
(vTrackTimeMs < uCurrentTimeMs - uDrawBehindMs ||
vTrackTimeMs > uCurrentTimeMs + uDrawAheadMs)) {
discard;
}
if (uIsAvatar) {
FragColor = vec4(1.0, 1.0, 1.0, 1.0);
} else {
float intensity = pow(1.0 - dist, 4.0);
float core = pow(1.0 - dist, 20.0);
vec3 railColor = (uClipTrack && vTrackTimeMs < uCurrentTimeMs) ? uBehindColor : uColor;
vec3 finalColor = mix(railColor, vec3(1.0), core);
// Цвет затухает в темноту, а не просто обрезается
FragColor = vec4(finalColor * fog, intensity * fog * uAlpha);
}
}