Backlog/engine/ui/shaders/rect.vert.hlsl

60 lines
1.3 KiB
HLSL

#include "rect_shared.hlsli"
StructuredBuffer<Scene> scene: register(t0, space0);
cbuffer Uniforms : register(b0, space1)
{
float2 Extents;
};
struct Input
{
float3 Position : TEXCOORD0;
float3 Normal : TEXCOORD1;
float4 Color : TEXCOORD2;
float2 UV : TEXCOORD3;
uint Bones : TEXCOORD4;
uint weights : TEXCOORD5;
uint Instance : SV_InstanceID;
};
struct VertexOut
{
float4 Color : TEXCOORD0;
float2 UV : TEXCOORD1;
float2 pixelPosition: TEXCOORD2;
uint Instance: TEXCOORD3;
float4 Position : SV_Position;
};
VertexOut main(Input v)
{
VertexOut o;
Scene s = scene[v.Instance];
float2 finalSize = (s.imageSize / Extents);
//float zLevel = objectBuffer.objects[gl_BaseInstance].zLevel;
float2 finalPos = ((s.imagePosition / Extents) * 2 - 1) - s.anchorPoint * finalSize * s.scale;
o.Color = s.baseColor;
float4 fp = float4(
finalPos.x + ( v.Position.x * finalSize.x * s.scale.x),
finalPos.y + (-v.Position.y * finalSize.y * s.scale.y),
v.Position.z, 1.0
);
o.Position = fp;
o.UV = float2(1 - v.UV.x, v.UV.y);
o.pixelPosition = (v.Position.xy - s.anchorPoint) / 2 * s.imageSize;
o.pixelPosition.y = s.imageSize.y - o.pixelPosition.y;
o.Instance = v.Instance;
return o;
}