Minestom/src/lwjgl/resources/shaders/mapcolorconvert.fragment.glsl

32 lines
870 B
GLSL

#version 330
in vec2 fragCoords;
out vec4 fragColor;
uniform sampler2D frame;
uniform sampler2D palette;
uniform float paletteSize;
void main() {
vec2 uv = fragCoords;
uv.y = -uv.y;
vec3 fragmentColor = texture(frame, uv).rgb;
// render in map colors
int closest = 0;
uint closestDistance = uint(2147483647);
for(int i = 4; i < paletteSize; i++) {
vec3 mapColor = texture(palette, vec2((i+0.5f)/paletteSize, 0.0)).rgb;
int dr = int((mapColor.r - fragmentColor.r)*255);
int dg = int((mapColor.g - fragmentColor.g)*255);
int db = int((mapColor.b - fragmentColor.b)*255);
uint d = uint(dr*dr)+uint(dg*dg)+uint(db*db);
if(d < closestDistance) {
closestDistance = d;
closest = i;
}
}
fragColor = vec4(closest/255.0, closest/255.0, closest/255.0, 1.0);
}