imgui-ash 0.1.0

ash/VMA renderer for imgui-rs
Documentation
#version 450 core

layout(location = 0) in vec2 position;
layout(location = 1) in vec2 uv;
layout(location = 2) in vec4 color;

layout(push_constant) uniform uPushConstant {
    vec2 scale;
    vec2 translate;
    bool is_srgb;
} pc;

out gl_PerVertex {
    vec4 gl_Position;
};

layout(location = 0) out struct {
    vec4 color;
    vec2 uv;
} vert_out;

vec4 srgb_to_linear(vec4 srgb) {
    vec3 color_srgb = srgb.rgb;
    vec3 selector = ceil(color_srgb - 0.04045); // 0 if under value, 1 if over
    vec3 under = color_srgb / 12.92;
    vec3 over = pow((color_srgb + 0.055) / 1.055, vec3(2.4));
    vec3 result = mix(under, over, selector);
    return vec4(result, srgb.a);
}

void main() {
    if (pc.is_srgb) {
        vert_out.color = color;
    } else {
        vert_out.color = srgb_to_linear(color);
    }

    vert_out.uv = uv;
    gl_Position = vec4(position * pc.scale + pc.translate, 0, 1);
}