mirror of
https://forgejo.xatacraft.ru/Sunshine/mkxp-sunshine.git
synced 2026-08-19 21:39:57 +00:00
124 lines
2.7 KiB
GLSL
124 lines
2.7 KiB
GLSL
|
|
uniform sampler2D texture;
|
|
|
|
uniform lowp vec4 tone;
|
|
|
|
uniform lowp float opacity;
|
|
uniform lowp vec4 color;
|
|
uniform lowp vec4 modulate;
|
|
|
|
uniform float bushDepth;
|
|
uniform lowp float bushOpacity;
|
|
|
|
uniform float uTime;
|
|
|
|
varying vec2 v_texCoord;
|
|
|
|
const vec3 lumaF = vec3(.299, .587, .114);
|
|
|
|
const bool simple = false;
|
|
|
|
const float disort = 0.5;
|
|
const float lines_scale = 3.0;
|
|
const float lines_fill = 0.075;
|
|
const float lines_speed = 0.19;
|
|
const float lines_opacity = 0.25;
|
|
|
|
const float layers_scale = 0.01;
|
|
const float layers_fill = 0.5;
|
|
const float layers_opacity = 0.25;
|
|
|
|
const float edge_dark_power = 1.0;
|
|
const float edge_dark_dist = 0.05;
|
|
|
|
const float chromatic_power = 0.0005;
|
|
|
|
const vec2 scale = vec2(0.85, 0.8);
|
|
|
|
float distance(vec2 v) {
|
|
return sqrt(v.x * v.x + v.y * v.y);
|
|
}
|
|
|
|
void main(){
|
|
// ------- crt --------
|
|
vec2 uv = v_texCoord;
|
|
|
|
float layers = 0.0;
|
|
vec2 edge_dark = vec2(0);
|
|
float edge_dark_res = 0.0;
|
|
vec4 frag;
|
|
|
|
uv -= 0.5;
|
|
uv /= scale;
|
|
|
|
float uv_dist = distance(uv);
|
|
uv = mix(uv, vec2(0), uv_dist * -disort) / (1.0 + disort / 2.0);
|
|
|
|
float lines_uv = (uv.y / lines_scale) - uTime * lines_speed;
|
|
float lines = floor(lines_uv + lines_fill) - floor(lines_uv);
|
|
lines *= lines_opacity;
|
|
|
|
if (!simple) {
|
|
float layers_uv = (uv.y / layers_scale);
|
|
layers = clamp(sin(layers_uv * 3.1415) - (1.0 - layers_fill), 0.0, 1.0);
|
|
layers *= layers_opacity;
|
|
|
|
edge_dark = abs(uv) * 2.0;
|
|
edge_dark -= 1.0 - edge_dark_dist;
|
|
edge_dark /= edge_dark_dist;
|
|
edge_dark = clamp(edge_dark, 0.0, 1.0);
|
|
edge_dark *= edge_dark_power;
|
|
edge_dark_res = edge_dark.x + edge_dark.y;
|
|
|
|
uv *= scale;
|
|
uv += 0.5;
|
|
|
|
vec4 frag1 = texture2D(texture, uv + vec2(-1, 1) * chromatic_power);
|
|
vec4 frag2 = texture2D(texture, uv + vec2(1, -1) * chromatic_power);
|
|
vec4 frag3 = texture2D(texture, uv);
|
|
frag = vec4(frag1.r, frag2.g, frag3.b, (frag1.w + frag2.w + frag3.w) / 3.0);
|
|
}
|
|
else
|
|
{
|
|
uv *= scale;
|
|
uv += 0.5;
|
|
frag = texture2D(texture, uv);
|
|
}
|
|
|
|
frag += vec4(lines, lines, lines, 0.0) -
|
|
vec4(layers, layers, layers, 0.0) -
|
|
vec4(edge_dark_res, edge_dark_res, edge_dark_res, 0.0);
|
|
|
|
frag.rgb = clamp(frag.rgb, 0.0, 1.0);
|
|
|
|
// ------- original shit --------
|
|
|
|
/* Apply gray */
|
|
float luma = dot(frag.rgb, lumaF);
|
|
frag.rgb = mix(frag.rgb, vec3(luma), tone.w);
|
|
|
|
/* Apply tone */
|
|
frag.rgb += tone.rgb;
|
|
|
|
/* Apply opacity */
|
|
frag.a *= opacity;
|
|
|
|
/* Apply color */
|
|
frag.rgb = mix(frag.rgb, color.rgb, color.a);
|
|
|
|
/* Apply modulation */
|
|
frag *= modulate;
|
|
|
|
/* Apply bush alpha by mathematical if */
|
|
lowp float underBush = float(v_texCoord.y < bushDepth);
|
|
frag.a *= clamp(bushOpacity + underBush, 0.0, 1.0);
|
|
|
|
gl_FragColor = mix(
|
|
frag,
|
|
vec4(0, 0, 0, 1),
|
|
float(uv.x < 0.0) +
|
|
float(uv.x > 1.0) +
|
|
float(uv.y < 0.0) +
|
|
float(uv.y > 1.0)
|
|
);
|
|
}
|