cbuffer renderer_data : register(b0) {
    float2 one_over_window_size;
    //float2 one_over_texture_size;
    float zoom;
    float padding;
};

struct input_t {
    uint vtx_index  : SV_VertexID;
    float4 quad     : BATCH_QUAD;
    float4 tex_quad : BATCH_TEX_QUAD;
    float4 colour   : BATCH_COLOUR;
};

struct output_t {
    float4 pos : SV_Position;
    float2 uv  : TEXCOORD1;
    float4 col : TEXCOORD2;
};

static const int indices[6] = {
    0, 1, 2, 2, 3, 0,
};

static const float3 positions[4] = {
    float3(0, 0, 0),
    float3(0, 1, 0),
    float3(1, 1, 0),
    float3(1, 0, 0),
};

static const float2 uvs[4] = {
    float2(0.0f, 0.0f), 
    float2(0.0f, 1.0f),
    float2(1.0f, 1.0f), 
    float2(1.0f, 0.0f), 
};

output_t main(input_t input) {
    output_t output;

    int vtx = indices[input.vtx_index];

    float3 pos = positions[vtx];

    pos.xy = ((pos.xy * input.quad.zw) + input.quad.xy) * zoom;
    pos.xy = (pos.xy * one_over_window_size) * 2.0 - 1.0;

    pos.y = -pos.y;

    /*
    x = ((x * ovws.x) * zoom * quad.w) - 1 + (quad.x * ovws.x * zoom);
    */

    // pos.xy *= one_over_window_size;
    // pos.xy *= zoom;
    // pos.xy *= input.quad.zw;
    // pos.x -= 1.0;
    // pos.y += 1.0;

    // pos.xy += float2(input.quad.x, -input.quad.y) * one_over_window_size * zoom;

    float2 uv = uvs[vtx];
    uv *= input.tex_quad.zw;
    uv += input.tex_quad.xy;

    output.pos = float4(pos, 1.0);
    output.uv  = uv;
    output.col = input.colour;

    return output;
}
