#ifndef _RUSHADER_D3D_SKIN_STANDARD_H_
#define _RUSHADER_D3D_SKIN_STANDARD_H_

// Rune system core
#include "../../Direct3D/Shader/RuShader_D3D_Base.h"

#pragma unmanaged

// ************************************************************************************************************************************************************

class CRuShader_Skin_Flat : public CRuShader_Skin_Base
{
public:
											CRuShader_Skin_Flat(CRuEngineD3D *engine);
	virtual									~CRuShader_Skin_Flat();

	// Shader capabilities query
	virtual const char*						GetShaderName() const;
	virtual INT32							GetShaderPriority() const;
	virtual DWORD							GetCaps() const;

	// Multi-Pass
	virtual INT32							GetNumPasses() const;

	// Rendering setup
	virtual void							BeginPass(INT32 passNumber);
};

// ************************************************************************************************************************************************************

class CRuShader_Skin_Prelit : public CRuShader_Skin_Base
{
public:
											CRuShader_Skin_Prelit(CRuEngineD3D *engine);
	virtual									~CRuShader_Skin_Prelit();

	// Shader capabilities query
	virtual const char*						GetShaderName() const;
	virtual INT32							GetShaderPriority() const;
	virtual DWORD							GetCaps() const;

	// Multi-Pass
	virtual INT32							GetNumPasses() const;

	// Rendering setup
	virtual void							BeginPass(INT32 passNumber);
};

// ************************************************************************************************************************************************************

class CRuShader_Skin_SH9 : public CRuShader_Skin_Base
{
public:
											CRuShader_Skin_SH9(CRuEngineD3D *engine);
	virtual									~CRuShader_Skin_SH9();

	// Shader capabilities query
	virtual const char*						GetShaderName() const;
	virtual INT32							GetShaderPriority() const;
	virtual DWORD							GetCaps() const;

	// Multi-Pass
	virtual INT32							GetNumPasses() const;

	// Rendering setup
	virtual void							BeginPass(INT32 passNumber);
};

// ************************************************************************************************************************************************************

class CRuShader_Skin_SH9_Gloss : public CRuShader_Skin_Base
{
public:
											CRuShader_Skin_SH9_Gloss(CRuEngineD3D *engine);
	virtual									~CRuShader_Skin_SH9_Gloss();

	// Shader capabilities query
	virtual const char*						GetShaderName() const;
	virtual INT32							GetShaderPriority() const;
	virtual DWORD							GetCaps() const;

	// Multi-Pass
	virtual INT32							GetNumPasses() const;

	// Rendering setup
	virtual void							BeginPass(INT32 passNumber);
};

// ************************************************************************************************************************************************************

inline const char *CRuShader_Skin_Flat::GetShaderName() const
{
	return "ruSHADER_SKIN_FLAT";
}

inline INT32 CRuShader_Skin_Flat::GetShaderPriority() const
{
	return 1000;
}

inline DWORD CRuShader_Skin_Flat::GetCaps() const
{
	return 0x00000000;
}

inline INT32 CRuShader_Skin_Flat::GetNumPasses() const
{
	return 1;
}

// ************************************************************************************************************************************************************

inline const char *CRuShader_Skin_Prelit::GetShaderName() const
{
	return "ruSHADER_SKIN_PRELIT";
}

inline INT32 CRuShader_Skin_Prelit::GetShaderPriority() const
{
	return 1000;
}

inline DWORD CRuShader_Skin_Prelit::GetCaps() const
{
	return 0x00000000;
}

inline INT32 CRuShader_Skin_Prelit::GetNumPasses() const
{
	return 1;
}

// ************************************************************************************************************************************************************

inline const char *CRuShader_Skin_SH9::GetShaderName() const
{
	return "ruSHADER_SKIN_SH9";
}

inline INT32 CRuShader_Skin_SH9::GetShaderPriority() const
{
	return 1000;
}

inline DWORD CRuShader_Skin_SH9::GetCaps() const
{
	return 0x00000000;
}

inline INT32 CRuShader_Skin_SH9::GetNumPasses() const
{
	return 1;
}

// ************************************************************************************************************************************************************

inline const char *CRuShader_Skin_SH9_Gloss::GetShaderName() const
{
	return "ruSHADER_SKIN_SH9_GLOSS";
}

inline INT32 CRuShader_Skin_SH9_Gloss::GetShaderPriority() const
{
	return 1000;
}

inline DWORD CRuShader_Skin_SH9_Gloss::GetCaps() const
{
	return 0x00000000;
}

inline INT32 CRuShader_Skin_SH9_Gloss::GetNumPasses() const
{
	return 1;
}

// ************************************************************************************************************************************************************

#pragma managed

#endif
