72 lines
1.5 KiB
HLSL
72 lines
1.5 KiB
HLSL
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;
|
|
}
|