57 lines
1.2 KiB
HLSL
57 lines
1.2 KiB
HLSL
// I just reuse this one for the shadow mapping right?
|
|
|
|
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 Output
|
|
{
|
|
float2 TexCoord : TEXCOORD0;
|
|
float3 WorldPos : TEXCOORD1;
|
|
float3 Normal: TEXCOORD2;
|
|
float4 DirectionalShadowFragPos: TEXCOORD3;
|
|
|
|
float4 Position : SV_Position;
|
|
};
|
|
|
|
struct Scene
|
|
{
|
|
float4x4 Model;
|
|
};
|
|
|
|
StructuredBuffer<Scene> scene: register(t0, space0);
|
|
|
|
cbuffer Uniforms : register(b0, space1)
|
|
{
|
|
float4x4 ViewProjection;
|
|
float4x4 ShadowMapProjection;
|
|
float time;
|
|
};
|
|
|
|
Output main(Input input)
|
|
{
|
|
Output output;
|
|
output.TexCoord = input.UV;
|
|
|
|
float4 pos = float4(input.Position, 1.0);
|
|
|
|
// pos.x += 0.2 * sin(time * 0.5 ) * pos.y * 0.5;
|
|
// pos.y += 0.2 * cos(time * 0.5 ) * pos.z * 0.5;
|
|
|
|
float4 WorldPos = mul(scene[input.Instance].Model, pos);
|
|
output.Position = mul(ViewProjection, mul(scene[input.Instance].Model, pos));
|
|
output.WorldPos = WorldPos.xyz;
|
|
output.Normal = input.Normal;
|
|
output.DirectionalShadowFragPos = mul(ShadowMapProjection, WorldPos);
|
|
|
|
return output;
|
|
}
|