-> gleiche Ratio (16:9); Neue math_graphics.h Funktionen (Aufräumen); git-svn-id: svn://ammerhai.com/home/mike/pokemon_repo@20 24008968-59e6-ed4c-a10b-0b2c954b24ab
64 lines
1.2 KiB
HLSL
64 lines
1.2 KiB
HLSL
struct VertexShaderInput {
|
|
// Per Vertex
|
|
float4 pos : VERTEX_POSITION;
|
|
float2 uv : UV_VERTEX;
|
|
uint vid : SV_VertexID;
|
|
|
|
// Per Instance
|
|
float4 pos_size : INSTANCE_POSITION_SIZE;
|
|
uint tile_type : TILE_TYPE;
|
|
float4 uv0uv1 : UV_INSTANCE;
|
|
|
|
};
|
|
|
|
cbuffer constants {
|
|
float aspect_ratio;
|
|
};
|
|
|
|
struct VertexShaderOutput {
|
|
float4 pos : SV_POSITION;
|
|
float4 uv0uv1 : COORDINATES;
|
|
uint tile_type : TILE_TYPE;
|
|
};
|
|
|
|
|
|
VertexShaderOutput main(VertexShaderInput input) {
|
|
VertexShaderOutput output;
|
|
|
|
float3x3 coord_sys = {
|
|
2, 0, -1,
|
|
0, -2, 1,
|
|
0, 0, 1
|
|
};
|
|
|
|
input.pos_size.xy = mul(coord_sys, float3(input.pos_size.xy, 1)).xy;
|
|
|
|
float3x3 pos = {
|
|
1, 0, input.pos_size.x,
|
|
0, 1, input.pos_size.y,
|
|
0, 0, 1
|
|
};
|
|
|
|
float3x3 size = {
|
|
input.pos_size.z, 0, 0,
|
|
0, input.pos_size.w, 0,
|
|
0, 0, 1
|
|
};
|
|
|
|
output.pos.xy = mul(pos, mul(size, input.pos.xyz)).xy;
|
|
|
|
float correction_factor = aspect_ratio / (16.0 / 9.0);
|
|
if(correction_factor < 1)
|
|
output.pos.y *= correction_factor;
|
|
else
|
|
output.pos.x /= correction_factor;
|
|
|
|
output.pos.zw = float2(0, 1);
|
|
|
|
output.uv0uv1.zw = float2(0, 0);
|
|
|
|
output.uv0uv1.xy = lerp(input.uv0uv1.xy, input.uv0uv1.zw, input.uv.xy);
|
|
output.tile_type = input.tile_type;
|
|
|
|
return output;
|
|
} |