//========= Copyright Valve Corporation, All rights reserved. ============//
//
// A class representing a shader
//
//=============================================================================

#ifndef DMESHADER_H
#define DMESHADER_H
#ifdef _WIN32
#pragma once
#endif

#include "datamodel/dmelement.h"


//-----------------------------------------------------------------------------
// Forward declarations
//-----------------------------------------------------------------------------
class IShader;


//-----------------------------------------------------------------------------
// A class representing a material
//-----------------------------------------------------------------------------
class CDmeShader : public CDmElement
{
	DEFINE_ELEMENT( CDmeShader, CDmElement );

public:
	void SetShaderName( const char *pShaderName );
	const char *GetShaderName() const;

	// Resolve
	virtual void Resolve();

private:
	// Finds a shader
	IShader *FindShader();

	// Remove all shader parameters that don't exist in the new shader
	void RemoveUnusedShaderParams( IShader *pShader );

	// Add all shader parameters that don't currently exist
	void AddNewShaderParams( IShader *pShader );

	// Add attribute for shader parameter
	CDmAttribute* AddAttributeForShaderParameter( IShader *pShader, int nIndex );

	IShader *m_pShader;
	CDmAttributeVarString m_ShaderName;
};

#endif // DMESHADER_H