mirror of
https://github.com/mkxp-z/mkxp-z.git
synced 2025-04-21 21:52:04 +02:00
53 lines
1.3 KiB
GLSL
53 lines
1.3 KiB
GLSL
// From https://raw.githubusercontent.com/Sentmoraap/doing-sdl-right/93a52a0db0ff2da5066cce12f5b9a2ac62e6f401/assets/lanczos3.frag
|
|
// Copyright 2020 Lilian Gimenez (Sentmoraap).
|
|
// mkxp-z modifications Copyright 2022-2023 Splendide Imaginarius.
|
|
// MIT license.
|
|
|
|
#ifdef GLSLES
|
|
precision highp float;
|
|
#endif
|
|
|
|
uniform sampler2D texture;
|
|
uniform vec2 sourceSize;
|
|
uniform vec2 texSizeInv;
|
|
varying vec2 v_texCoord;
|
|
|
|
float lanczos3(float x)
|
|
{
|
|
x = max(abs(x), 0.00001);
|
|
float val = x * 3.141592654;
|
|
return sin(val) * sin(val / 3.0) / (val * val);
|
|
}
|
|
|
|
void main()
|
|
{
|
|
vec2 pixel = v_texCoord * sourceSize + 0.5;
|
|
vec2 frac = fract(pixel);
|
|
vec2 onePixel = texSizeInv;
|
|
pixel = floor(pixel) * texSizeInv - onePixel / 2.0;
|
|
|
|
float lanczosX[6];
|
|
float sum = 0.0;
|
|
for(int x = 0; x < 6; x++)
|
|
{
|
|
lanczosX[x] = lanczos3(float(x) - 2.0 - frac.x);
|
|
sum += lanczosX[x];
|
|
}
|
|
for(int x = 0; x < 6; x++) lanczosX[x] /= sum;
|
|
sum = 0.0;
|
|
float lanczosY[6];
|
|
for(int y = 0; y < 6; y++)
|
|
{
|
|
lanczosY[y] = lanczos3(float(y) - 2.0 - frac.y);
|
|
sum += lanczosY[y];
|
|
}
|
|
for(int y = 0; y < 6; y++) lanczosY[y] /= sum;
|
|
gl_FragColor = vec4(0);
|
|
for(int y = -2; y <= 3; y++)
|
|
{
|
|
vec4 colour = vec4(0);
|
|
for(int x = -2; x <= 3; x++)
|
|
colour += texture2D(texture, pixel + vec2(float(x) * onePixel.x, float(y) * onePixel.y)).rgba * lanczosX[x + 2];
|
|
gl_FragColor += colour * lanczosY[y + 2];
|
|
}
|
|
}
|