ngx-open-map-wrapper/node_modules/maplibre-gl/src/shaders/terrain.fragment.glsl

36 lines
1.2 KiB
GLSL

uniform sampler2D u_texture;
uniform vec4 u_fog_color;
uniform vec4 u_horizon_color;
uniform float u_fog_ground_blend;
uniform float u_fog_ground_blend_opacity;
uniform float u_horizon_fog_blend;
uniform bool u_is_globe_mode;
in vec2 v_texture_pos;
in float v_fog_depth;
const float gamma = 2.2;
vec4 gammaToLinear(vec4 color) {
return pow(color, vec4(gamma));
}
vec4 linearToGamma(vec4 color) {
return pow(color, vec4(1.0 / gamma));
}
void main() {
vec4 surface_color = texture(u_texture, vec2(v_texture_pos.x, 1.0 - v_texture_pos.y));
// Skip fog blending in globe mode
if (!u_is_globe_mode && v_fog_depth > u_fog_ground_blend) {
vec4 surface_color_linear = gammaToLinear(surface_color);
float blend_color = smoothstep(0.0, 1.0, max((v_fog_depth - u_horizon_fog_blend) / (1.0 - u_horizon_fog_blend), 0.0));
vec4 fog_horizon_color_linear = mix(gammaToLinear(u_fog_color), gammaToLinear(u_horizon_color), blend_color);
float factor_fog = max(v_fog_depth - u_fog_ground_blend, 0.0) / (1.0 - u_fog_ground_blend);
fragColor = linearToGamma(mix(surface_color_linear, fog_horizon_color_linear, pow(factor_fog, 2.0) * u_fog_ground_blend_opacity));
} else {
fragColor = surface_color;
}
}