40 lines
1016 B
GLSL
40 lines
1016 B
GLSL
#version 100
|
|
precision mediump float;
|
|
// Texture
|
|
uniform bool u_has_texture;
|
|
uniform sampler2D u_texture_unit;
|
|
// Color
|
|
varying vec4 v_color;
|
|
varying vec4 v_texture_pos;
|
|
// Alpha Test
|
|
uniform bool u_alpha_test;
|
|
// Fog
|
|
uniform bool u_fog;
|
|
uniform vec4 u_fog_color;
|
|
uniform bool u_fog_is_linear;
|
|
uniform float u_fog_start;
|
|
uniform float u_fog_end;
|
|
varying vec4 v_fog_eye_position;
|
|
// Main
|
|
void main(void) {
|
|
gl_FragColor = v_color;
|
|
// Texture
|
|
if (u_has_texture) {
|
|
gl_FragColor *= texture2D(u_texture_unit, v_texture_pos.xy);
|
|
}
|
|
// Alpha Test
|
|
if (u_alpha_test && gl_FragColor.a <= 0.1) {
|
|
discard;
|
|
}
|
|
// Fog
|
|
if (u_fog) {
|
|
float fog_factor;
|
|
if (u_fog_is_linear) {
|
|
fog_factor = (u_fog_end - length(v_fog_eye_position)) / (u_fog_end - u_fog_start);
|
|
} else {
|
|
fog_factor = exp(-u_fog_start * length(v_fog_eye_position));
|
|
}
|
|
gl_FragColor = mix(gl_FragColor, u_fog_color, 1.0 - clamp(fog_factor, 0.0, 1.0));
|
|
}
|
|
}
|