#pragma once #include "IFileSystem.h" #include "IEngine.h" #include "IShader.h" #include "../Commands/CommandUserBase.h" class Shader : public IShader , public CommandUserBase { protected: static const unsigned char ApplyFirstPassCommandType = 0; static const unsigned char NextPassCommandType = 1; public: Shader(IEngine& argEngine); virtual ~Shader(); virtual void LoadFromFile(const string16& argValue); virtual string8 get_TechniqueName() const { return m_TechniqueName; } virtual void set_TechniqueName(const string8& argValue); virtual ID3D10EffectTechnique* get_DX10Technique() const { return m_Technique; } virtual IInternalShader* get_InternalShader() const { return m_InternalShader; } virtual bool TryApplyNextPass(); virtual void ApplyFirstPass(); virtual uint32 get_CurrentRenderPass() const { return m_CurrentPass; } virtual void set_Priority(unsigned char argValue); virtual unsigned char get_Priority() const; protected: virtual void Uninitialize(); IInternalShader* CreateOrFindShader(const string16& argFileName); // ICommandUser virtual CommandExecuteResult::Enumeration ExecuteCommand(unsigned char argCommandType, ICommandBuffer& argCurrentBuffer, uint32 argCurrentPositon); virtual string8 get_UserName() const { return "Shader"; } private: IEngine& m_Engine; string8 m_TechniqueName; uint32 m_CurrentPass; ID3D10EffectTechnique* m_Technique; IInternalShader* m_InternalShader; D3D10_TECHNIQUE_DESC m_TechDesc; unsigned char m_Priority; };