Files
libretro/bios/Other/fpse-ng/FPse64/shaders/Dot.fsh
T

46 lines
1.7 KiB
GLSL

precision highp float;
precision highp int;
uniform sampler2D uTex;
uniform highp float resX;
uniform highp float resY;
varying highp vec2 vTexCoord;
varying vec4 v_texcoord1;
varying vec4 v_texcoord2;
varying vec4 v_texcoord3;
varying vec4 v_texcoord4;
varying vec2 v_texcoord5;
varying vec2 v_texcoord6;
float dist(vec2 coord, vec2 source)
{
vec2 delta = coord - source;
return sqrt(dot(delta, delta));
}
float color_bloom(vec3 color)
{
const vec3 gray_coeff = vec3(0.30, 0.59, 0.11);
float bright = dot(color, gray_coeff);
return mix(1.0 + 0.05, 1.0 - 0.05, bright);
}
vec3 lookup(vec2 pixel_no, float offset_x, float offset_y, vec3 color)
{
vec2 offset = vec2(offset_x, offset_y);
float delta = dist(fract(pixel_no), offset + vec2(0.5, 0.5));
return color * exp(-2.4 * delta * color_bloom(color));
}
void main()
{
vec3 mid_color = lookup(v_texcoord6, 0.0, 0.0, texture2D(uTex, v_texcoord5).rgb);
vec3 color = vec3(0.0, 0.0, 0.0);
color += lookup(v_texcoord6, -1.0, -1.0, texture2D(uTex, v_texcoord1.xy).rgb);
color += lookup(v_texcoord6, 0.0, -1.0, texture2D(uTex, v_texcoord1.zw).rgb);
color += lookup(v_texcoord6, 1.0, -1.0, texture2D(uTex, v_texcoord2.xy).rgb);
color += lookup(v_texcoord6, -1.0, 0.0, texture2D(uTex, v_texcoord2.zw).rgb);
color += mid_color;
color += lookup(v_texcoord6, 1.0, 0.0, texture2D(uTex, v_texcoord3.xy).rgb);
color += lookup(v_texcoord6, -1.0, 1.0, texture2D(uTex, v_texcoord3.zw).rgb);
color += lookup(v_texcoord6, 0.0, 1.0, texture2D(uTex, v_texcoord4.xy).rgb);
color += lookup(v_texcoord6, 1.0, 1.0, texture2D(uTex, v_texcoord4.zw).rgb);
vec3 out_color = mix(1.2 * mid_color, color, 0.65);
gl_FragColor = vec4(out_color, 1.0);
}