#include "VertexConstants.h" struct VS_INPUT { // Per vertex data float3 vPos : POSITION; float3 vNorm : NORMAL; float2 vTex : TEXCOORD0; float4 vCol : COLOR; // Per instance data matrix iModel : INSTANCE_TRANSFORM; // model matrix matrix iModelInvTrans : INSTANCE_INV_TRANSFORM; // (model matrix^-1)^T float4 iCol : INSTANCE_COLOR; // color of the model }; struct VS_OUTPUT { float4 Position : SV_POSITION; }; VS_OUTPUT main(VS_INPUT input) { VS_OUTPUT output; // Check if the alpha = 0 if (input.vCol.a * input.iCol.a == 0.0) { // Don't draw the triangle by moving it to an invalid location output.Position = float4(0, 0, 0, 0); } else { // Transform the position from world space to homogeneous projection space for the light float4 pos = float4(input.vPos, 1.0f); pos = mul(input.iModel, pos); pos = mul(LightView, pos); pos = mul(LightProjection, pos); output.Position = pos; } return output; }