Files
Vibe-HD-2D/assets/shaders/pixelart.glsl
Gabrieal Jimmy 2c99305fb0 init
2026-10-02 12:42:00 -05:00

20 lines
847 B
GLSL

// Fragment-stage only (uses screen-space derivatives).
// "Sharp bilinear": crisp texel edges when magnified, antialiased boundaries
// and correct mip selection when minified (unlike GL_NEAREST shimmer).
vec4 sharpSample(sampler2D tex, vec2 uv) {
vec2 size = vec2(textureSize(tex, 0));
vec2 px = uv * size;
vec2 seam = floor(px + 0.5);
vec2 fw = max(fwidth(px), vec2(1e-5));
px = seam + clamp((px - seam) / fw, -0.5, 0.5);
return textureGrad(tex, px / size, dFdx(uv), dFdy(uv));
}
vec4 sharpSampleArray(sampler2DArray tex, vec2 uv, float layer) {
vec2 size = vec2(textureSize(tex, 0).xy);
vec2 px = uv * size;
vec2 seam = floor(px + 0.5);
vec2 fw = max(fwidth(px), vec2(1e-5));
px = seam + clamp((px - seam) / fw, -0.5, 0.5);
return textureGrad(tex, vec3(px / size, layer), dFdx(uv), dFdy(uv));
}