#pragma once #include "BasisParameterCollection.h" #include "IShaderParameterCollection.h" #include "../Commands/CommandUserBase.h" struct IEngine; class ShaderParameterCollection : public IShaderParameterCollection , public CommandUserBase { static const unsigned char SetShaderParameterCollectionCommandType = 0; static const unsigned char SetFollowingShaderParameterCollectionCommandType = 1; public: ShaderParameterCollection(IEngine& argEngine, unsigned char argBasePriority = 4); virtual ~ShaderParameterCollection(); virtual void Uninitialize(); // IShaderParameterCollection virtual bool get_IsPreconditionForFollowingShaders() const; virtual void set_IsPreconditionForFollowingShaders(bool argValue); virtual void SetParameter(const string8& argParameterName,IShaderParameter* ar_Parameter_); virtual void SetParameter(const string8& argParameterName, ITexture& argParameter, ParameterBindType::Enumeration argParamNameType = ParameterBindType::BindBySemantic); virtual void SetParameter(const string8& argParameterName, float* af_Parameter_, ParameterBindType::Enumeration argParamNameType = ParameterBindType::BindBySemantic); virtual void SetParameter(const string8& argParameterName, float argParameter, ParameterBindType::Enumeration argParamNameType = ParameterBindType::BindBySemantic); virtual void SetParameter(const string8& argParameterName, D3DXVECTOR4* ar_Parameter_, ParameterBindType::Enumeration argParamNameType = ParameterBindType::BindBySemantic); virtual void SetParameter(const string8& argParameterName, const D3DXVECTOR4& argParameter, ParameterBindType::Enumeration argParamNameType = ParameterBindType::BindBySemantic); virtual void SetParameter(const string8& argParameterName, D3DXVECTOR3* ar_Parameter_, ParameterBindType::Enumeration argParamNameType = ParameterBindType::BindBySemantic); virtual void SetParameter(const string8& argParameterName, const D3DXVECTOR3& argParameter, ParameterBindType::Enumeration argParamNameType = ParameterBindType::BindBySemantic); virtual void SetParameter(const string8& argParameterName, D3DXMATRIX* argParameter, ParameterBindType::Enumeration argParamNameType = ParameterBindType::BindBySemantic); virtual void SetParameter(const string8& argParameterName, const D3DXMATRIX& argParameter, ParameterBindType::Enumeration argParamNameType = ParameterBindType::BindBySemantic); virtual void SetParameter(const string8& argParameterName, bool* ab_Parameter_, ParameterBindType::Enumeration argParamNameType = ParameterBindType::BindBySemantic); virtual void SetParameter(const string8& argParameterName, bool argParameter, ParameterBindType::Enumeration argParamNameType = ParameterBindType::BindBySemantic); virtual void RemoveParameter(const string8& argParameterName); protected: // ICommandUser virtual CommandExecuteResult::Enumeration ExecuteCommand(unsigned char argCommandType, ICommandBuffer& argCurrentBuffer, uint32 argCurrentPositon); virtual bool get_IsPreconditionForNextCommands() const { return m_IsPreconditionForFollowingShaders; } virtual string8 get_UserName() const { return "ShaderParameterCollection"; } void UseOnShader(IShader& argShader); protected: IEngine& m_Engine; BasisShaderParameterCollection m_BasisShaderParameterCollection; bool m_IsPreconditionForFollowingShaders; unsigned char m_BasePriority; };