////////////////////////////////////////////////////////////////////////////////////////////////////
// Structures
////////////////////////////////////////////////////////////////////////////////////////////////////

// Input : Model
struct VS_MODEL_INPUT
{
	float3 pos   : POSITION;
	float4 color : COLOR;

#if ENABLE_NORMAL
	float3 normal : NORMAL;
#endif //ENABLE_NORMAL

#if ENABLE_TANGENT_SPACE
	float3 tangent  : TANGENT;
	float3 binormal : BINORMAL;
#endif //ENABLE_TANGENT_SPACE

#if ENABLE_TEXTURE
	float2 tex : TEXCOORD;
#endif //ENABLE_TEXTURE

#if ENABLE_SKINNING
	uint4  indices : BLENDINDICES;
	float4 weights : BLENDWEIGHT;
#endif //ENABLE_SKINNING
};

// Output : ColorModel
struct VS_COLOR_MODEL_OUTPUT
{
	float4 pos   : MSV_POSITION;
	float4 color : COLOR0;

	float4 worldPos : TEXCOORD0;
	float4 projPos  : TEXCOORD1;

#if ENABLE_LIGHTING

	#if ENABLE_BUMP
		float3 tangent  : TEXCOORD2;
		float3 binormal : TEXCOORD3;
	#endif //ENABLE_BUMP

	float3 normal : TEXCOORD4;

	#if ENABLE_SSAO
		float3 viewNormal : TEXCOORD5;
	#endif //ENABLE_SSAO

#endif //ENABLE_LIGHTING

#if ENABLE_TEXTURE
	float2 tex : TEXCOORD6;
#endif //ENABLE_TEXTURE

#if ENABLE_SHADOW_RECEIVE
	float4 shadowDepth : TEXCOORD7;
	float4 shadowTex   : TEXCOORD8;
#endif //ENABLE_SHADOW_RECEIVE
};

// Output : MaskModel
struct VS_MASK_MODEL_OUTPUT
{
	float4 pos     : MSV_POSITION;
	float4 projPos : TEXCOORD0;
};

// Output : ShadowModel
struct VS_SHADOW_MODEL_OUTPUT
{
    float4 pos   : MSV_POSITION;
    float4 color : COLOR0;

#if ENABLE_TEXTURE
    float2 tex   : TEXCOORD0;
#endif //ENABLE_TEXTURE

    float4 depth : TEXCOORD1;
};

// Output : SelectModel
struct VS_SELECT_MODEL_OUTPUT
{
    float4 pos : MSV_POSITION;
};
