#include "common.h"

struct Appdata
{
    float4 Position	    : POSITION;

    int4   BoneIndices  : COLOR0;
};

struct VertexOutput
{
    float4 HPosition    : POSITION;
};

uniform float ShadowExtrusionDistance;

uniform float4 WorldMatrixArray[MAX_BONE_COUNT * 3];

VertexOutput DefaultVS(Appdata IN)
{
    VertexOutput OUT = (VertexOutput)0;

    int boneIndex = IN.BoneIndices.r;

    float4 worldRow0 = WorldMatrixArray[boneIndex * 3 + 0];
    float4 worldRow1 = WorldMatrixArray[boneIndex * 3 + 1];
    float4 worldRow2 = WorldMatrixArray[boneIndex * 3 + 2];

	float3 posWorld = float3(dot(worldRow0, IN.Position), dot(worldRow1, IN.Position), dot(worldRow2, IN.Position));

    float3 extrusion = G.Lamp0Dir * (ShadowExtrusionDistance * IN.BoneIndices.g);

	OUT.HPosition = mul(G.ViewProjection, float4(posWorld + extrusion, 1));

	return OUT;
}

float4 DefaultPS(): COLOR0
{
    return float4(0, 0, 0, 1);
}
