#version 450
#extension GL_ARB_separate_shader_objects : enable

layout(location = 0) in vec3 vPos;
layout(location = 1) in vec2 vUv;

layout(location = 0) out vec2 fUv;

layout(binding = 0) uniform Transform
{
    mat4 viewProj;
    vec3 pos;
    vec2 size;
} trans;

mat4 RemoveRotation(mat4 inMat)
{
    inMat[0][0] = 1.0;
    inMat[0][1] = 0.0;
    inMat[0][2] = 0.0;
    inMat[1][0] = 0.0;
    inMat[1][1] = 1.0;
    inMat[1][2] = 0.0;
    inMat[2][0] = 0.0;
    inMat[2][1] = 0.0;
    inMat[2][2] = 1.0;

    return inMat;
}

void main()
{
    // The vec4 we will use to set gl_Position
    vec4 pos = vec4(trans.pos, 1.0f);

    // Adjust the position based on the camera view
    // Extract the right and up vectors from the view matrix
    vec3 right = vec3(trans.viewProj[0][0], trans.viewProj[1][0], trans.viewProj[2][0]);
    vec3 up = vec3(trans.viewProj[0][1], trans.viewProj[1][1], trans.viewProj[2][1]);

    // Adjust the quad vertices to face the camera
    // The inPosition.xy should be in NDC space, from -1 to 1
    pos.xyz += (right * vPos.x * trans.size.x) + (up * vPos.y * trans.size.y);

    // Output position
    gl_Position = trans.viewProj * pos;

    // Pass through the texture coordinates
    fUv = vUv;
}
