/*
 * TODO:
 * * maybe rename this to 'sprite.hlsl' (draw_rect and stuff would become draw_sprite)
 * that way UI & text can have a separate shader (IE: draw_ui_rect, draw_ui_text, etc...)
 *
 * for tiles - separate shader. maybe upload all tile data in constant buffer, and drawing
 * tiles can just be one giant quad (that the fragment shader indexes into)
 */

struct {
    SamplerState sampler0;
    Texture2D texture0;
} globals;

struct vs_input {
    float4 pos : POSITION;
    float2 uv  : TEXCOORD;
    float4 col : COLOR;
};

struct ps_input {
    float4 pos : SV_POSITION;
    float2 uv  : TEXCOORD;
    float4 col : COLOR;
};

cbuffer vs_constants : register(b0)
{
    float4x4 projection;
};

ps_input vs_main(vs_input input)
{
    ps_input output;

    output.pos = mul(projection, float4(input.pos.xy, 0.f, 1.f));
    output.uv = input.uv;
    output.col = input.col;

    return output;
}

float4 ps_main(ps_input input) : SV_TARGET
{
    return globals.texture0.Sample(globals.sampler0, input.uv) * input.col;
}
