cbuffer MatrixBuffer { matrix worldMatrix; matrix viewMatrix; matrix projectionMatrix; matrix lightViewProjMatrix; matrix lightViewProjMatrix2; matrix lightViewProjMatrix3; }; struct VertexInput { float4 position : POSITION; float2 texCoord0 : TEXCOORD0; float3 normal : NORMAL; }; struct VS_to_PS { float4 position : SV_POSITION; float2 texCoord0 : TEXCOORD0; float3 normal : NORMAL; float4 lightPosition1 : TEXCOORD1; float4 lightPosition2 : TEXCOORD2; float4 lightPosition3 : TEXCOORD3; }; VS_to_PS ShadowVertexShader(VertexInput input) { VS_to_PS output; input.position.w = 1.0f; output.position = mul(input.position, worldMatrix); output.position = mul(output.position, viewMatrix); output.position = mul(output.position, projectionMatrix); output.lightPosition1 = mul(input.position, worldMatrix); output.lightPosition1 = mul(output.lightPosition1, lightViewProjMatrix); output.lightPosition2 = mul(input.position, worldMatrix); output.lightPosition2 = mul(output.lightPosition2, lightViewProjMatrix2); output.lightPosition3 = mul(input.position, worldMatrix); output.lightPosition3 = mul(output.lightPosition3, lightViewProjMatrix3); output.texCoord0 = input.texCoord0; output.normal = normalize(mul(input.normal, (float3x3)worldMatrix)); return output; }