starlight-renderer 0.0.1

WIP renderer framework
#version 460

#extension GL_EXT_scalar_block_layout : enable
#extension GL_EXT_buffer_reference : enable
#extension GL_EXT_buffer_reference2 : enable
#extension GL_EXT_shader_explicit_arithmetic_types_int8 : enable
#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable
#extension GL_GOOGLE_include_directive : enable

#include "../pipeline_pieces/common.glsl"

layout(location = 0) flat in uint draw_id;
layout(location = 1) in vec4 vertex_color;
layout(location = 2) in vec2 vertex_uv;
layout(location = 3) in vec3 vertex_normal;

layout(buffer_reference, scalar) buffer Material {
    vec4 color;
    ImageRef image_ref;
};

layout(location = 0) out vec4 f_color;

float remap(float v, float inMin, float inMax, float outMin, float outMax) {
    float t = (v - inMin) / (inMax - inMin);
    return outMin + (outMax - outMin) * t;
}

void main() {
    Metadata metadata = pc.metadata_ptr.data[draw_id];
    Material material = Material(metadata.material);
    vec4 unlit_color = blend_premul(vertex_color, material.color);
    if (uint64_t(material.image_ref) != 0) {
        vec4 image_sample = sample_image(material.image_ref, vertex_uv);
        unlit_color = blend_premul(unlit_color, image_sample);
    }
    vec3 ref_dir = normalize(vec3(1.0, 1.0, 1.0));
    f_color = vec4(unlit_color.rgb * remap(dot(ref_dir, normalize(vertex_normal)), -1.0, 1.0, 0.4, 1.0), unlit_color.a);
}