2021-08-13 22:38:51 +00:00
|
|
|
#version 300 es
|
2023-03-08 22:20:01 +00:00
|
|
|
#extension GL_OES_EGL_image_external_essl3 : enable
|
|
|
|
|
2023-03-05 03:10:21 +00:00
|
|
|
precision highp float;
|
2021-08-13 22:38:51 +00:00
|
|
|
|
|
|
|
#define PI 3.141592653589793
|
|
|
|
|
|
|
|
in vec2 fragCoord;
|
|
|
|
out vec4 fragColor;
|
|
|
|
|
2023-03-08 22:20:01 +00:00
|
|
|
uniform sampler2D sampler1;
|
2021-08-13 22:38:51 +00:00
|
|
|
float sinc(float x)
|
|
|
|
{
|
|
|
|
return x == 0.0 ? 1.0 : sin(x * PI) / (x * PI);
|
|
|
|
}
|
|
|
|
|
|
|
|
float lanczos(float x)
|
|
|
|
{
|
|
|
|
return sinc(x) * sinc(x * 0.5);
|
|
|
|
}
|
|
|
|
|
|
|
|
float lanczos(vec2 v)
|
|
|
|
{
|
|
|
|
return lanczos(v.x) * lanczos(v.y);
|
|
|
|
}
|
|
|
|
|
|
|
|
void main()
|
|
|
|
{
|
2023-03-08 22:20:01 +00:00
|
|
|
vec2 size = vec2(textureSize(sampler1, 0));
|
2021-08-13 22:38:51 +00:00
|
|
|
vec2 pos = fragCoord * size;
|
|
|
|
vec2 invSize = 1.0 / size;
|
|
|
|
vec2 uvc = floor(pos) + vec2(0.5, 0.5);
|
|
|
|
|
2021-08-16 01:09:48 +00:00
|
|
|
vec2 uvs[9] = vec2[](
|
2021-08-13 22:38:51 +00:00
|
|
|
uvc + vec2(-1.0, -1.0),
|
|
|
|
uvc + vec2(-1.0, 0.0),
|
|
|
|
uvc + vec2(-1.0, 1.0),
|
|
|
|
uvc + vec2( 0.0, -1.0),
|
|
|
|
uvc + vec2( 0.0, 0.0),
|
|
|
|
uvc + vec2( 0.0, 1.0),
|
|
|
|
uvc + vec2( 1.0, -1.0),
|
|
|
|
uvc + vec2( 1.0, 0.0),
|
2021-08-16 01:09:48 +00:00
|
|
|
uvc + vec2( 1.0, 1.0)
|
2021-08-13 22:38:51 +00:00
|
|
|
);
|
|
|
|
|
2021-08-16 01:09:48 +00:00
|
|
|
float factors[9];
|
2021-08-13 22:38:51 +00:00
|
|
|
float sum = 0.0;
|
2021-08-16 01:09:48 +00:00
|
|
|
for (int i = 0; i < 9; ++i)
|
2021-08-13 22:38:51 +00:00
|
|
|
{
|
|
|
|
factors[i] = lanczos(uvs[i] - fragCoord * size);
|
|
|
|
sum += factors[i];
|
|
|
|
}
|
|
|
|
|
2021-08-16 01:09:48 +00:00
|
|
|
for (int i = 0; i < 9; ++i)
|
2021-08-13 22:38:51 +00:00
|
|
|
factors[i] /= sum;
|
|
|
|
|
|
|
|
vec3 color = vec3(0.0);
|
2021-08-16 01:09:48 +00:00
|
|
|
for (int i = 0; i < 9; ++i)
|
2023-03-08 22:20:01 +00:00
|
|
|
color += texture(sampler1, uvs[i] * invSize).rgb * factors[i];
|
2021-08-13 22:38:51 +00:00
|
|
|
|
|
|
|
fragColor = vec4(color, 1.0);
|
|
|
|
}
|