#ifdef ASURA_USE_PRAGMA_ONCE
	#pragma once
#endif

#ifndef __ASURA_PS3_SHADER_ELEMENTS_CG_H__
#define __ASURA_PS3_SHADER_ELEMENTS_CG_H__

class Asura_PS3_GCM_TextureUnitElement
{
public:
//	Asura_PS3_GCM_TextureUnitElement()
//	{
//		m_cTextureUnit = NULL;
//	}

	~Asura_PS3_GCM_TextureUnitElement()
	{
		CleanUp();
	}

	void CleanUp( void )
	{
		delete[] m_cTextureUnit;
		m_cTextureUnit = NULL;
	}

	const char*			m_szName;
	unsigned char		m_ucArraySize; // In general this value must be one if you don't have an array of textures
	char*				m_cTextureUnit; //Automatically set by the Vertex/Fragment Program
}; //Asura_PS3_GCM_TextureUnitElement

class Asura_PS3_GCM_VertexShaderUniformParameter
{
public:
//	Asura_PS3_GCM_VertexShaderUniformParameter()
//	{
//		m_usRegister = NULL;
//	}

	~Asura_PS3_GCM_VertexShaderUniformParameter()
	{
		CleanUp();
	}

	void CleanUp( void )
	{
		delete[] m_usRegister;
		m_usRegister = NULL;
	}

	const char*			m_szName;
	unsigned short		m_usArraySize; //In general this value must be one if you don't have an array of uniforms
	unsigned char		m_sizeInFloat4ForOneElement;
	unsigned short*		m_usRegister; //Automatically set by the Vertex Program
}; //Asura_PS3_GCM_VertexShaderUniformParameter

class Asura_PS3_GCM_FragmentShaderUniformParameter
{
public:
//	Asura_PS3_GCM_FragmentShaderUniformParameter()
//	{
//		m_usaOffsets	= NULL;
//		m_faLastValues	= NULL;
//	}

	~Asura_PS3_GCM_FragmentShaderUniformParameter()
	{
		CleanUp();
	}

	void CleanUp( void )
	{
		delete[] m_usaOffsets;
		delete[] m_faLastValues;

		m_usaOffsets	= NULL;
		m_faLastValues	= NULL;
	}

	const char*			m_szName;
	unsigned short		m_usArraySize; //In general this value must be one if you don't have an array of uniforms
	unsigned char		m_ucSizeInFloatsForOneElement;
	unsigned short*		m_usaOffsets; //Automatically set by the Fragment Program ( array of 32 possible position, the size is 32 * m_usArraySize )
	float*				m_faLastValues; //Automatically managed by the Fragment Program ( basically keep a buffer of last values set in the fragment program so we do not set them twice )
}; //Asura_PS3_GCM_FragmentShaderUniformParameter

#endif //__ASURA_PS3_SHADER_ELEMENTS_CG_H__
