in float f_color_cursor;
flat in int f_ij_raw;
uniform float brightness;
uniform int use_rgb_mode;

out vec4 fragColor;

const uint IJ_INVALID   = 0xBC00BC00u;
const uint IJ_HIGHLIGHT  = 0x40004000u;

vec4 enlight(vec4 color, float rate) {
    return vec4(1.0, 1.0, 1.0, 1.0) * rate + color * (1.0 - rate);
}

void main(void)
{
    if (use_rgb_mode == 1) {
        uint ij_bits = uint(f_ij_raw);
        if (ij_bits == IJ_INVALID) {
            fragColor = vec4(0.0, 0.0, 0.0, 0.0);
        }
        else if (ij_bits == IJ_HIGHLIGHT) {
            fragColor = vec4(1.0, 0.1, 1.0, 1.0);
        }
        else {
            vec3 rgb = vec3(
                float((f_ij_raw >> 16) & 0xFF) / 256.0,
                float((f_ij_raw >> 8) & 0xFF) / 256.0,
                float(f_ij_raw & 0xFF) / 256.0
            );
            fragColor = enlight(vec4(rgb, 1.0), brightness);
        }
        return;
    }
    if (f_color_cursor < 0.0)
        fragColor = vec4(0.0, 0.0, 0.0, 0.0);
    else if (f_color_cursor > 1.0)
        fragColor = vec4(1.0, 0.1, 1.0, 1.0);
    else {
        fragColor = enlight(colormap(f_color_cursor), brightness);
    }
}
