#ifndef ShaderManagerInterface_H #define ShaderManagerInterface_H "$Id:$" #include "CKBaseManager.h" #include "CKRasterizer.h" #ifdef CompileShader #undef CompileShader #endif //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // Shader Manager Class //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// class ShaderManagerInterface { public: ShaderManagerInterface(CKContext *Context) : m_Context(Context), m_DefaultShader(0), m_ShadowShader(0), m_SavePreProcessed(false) {} virtual ~ShaderManagerInterface() {} friend class ShaderManagerWrapper; //-------------------------------------------------------------- // Methods to implement //-------------------------------------------------------------- //--- Called to save manager data. return NULL if nothing to save... virtual CKStateChunk* SaveData(CKFile* SavedFile) = 0; //--- Called to load manager data. virtual CKERROR LoadData(CKStateChunk *chunk,CKFile* LoadedFile) = 0; //--- Called before the end of a CKContext::ClearAll operation. virtual CKERROR PreClearAll() = 0; //--- Called at the end of a CKContext::ClearAll operation. virtual CKERROR PostClearAll() = 0; //--- Called at deletion of a CKContext virtual CKERROR OnCKEnd() = 0; //--- Called at Play virtual CKERROR OnCKPlay() = 0; //--- Called at the end of the creation of a CKContext. virtual CKERROR OnCKInit() = 0; //--- Called at the end of a load operation. virtual CKERROR PostLoad() = 0; //--- Called at the end of a save operation. virtual CKERROR PostSave() = 0; virtual CKERROR OnRasterizerEvent(CKRST_EVENTS Event,CKRenderContext* dev) = 0; //--- Returns list of functions implemented by the manager. // virtual CKDWORD GetValidFunctionsMask() { // return CKShaderManager::GetValidFunctionsMask() | // CKMANAGER_FUNC_PreClearAll| // CKMANAGER_FUNC_PostClearAll| // CKMANAGER_FUNC_OnCKEnd| // CKMANAGER_FUNC_OnCKPlay| // CKMANAGER_FUNC_OnCKInit| // CKMANAGER_FUNC_PostLoad| // CKMANAGER_FUNC_PostSave| // CKMANAGER_FUNC_OnRasterizerEvent; // } protected: virtual void OnCreateDevice(CKRenderContext* rc) = 0; virtual void OnDestroyDevice(CKRenderContext* rc) = 0; virtual void OnLostDevice(CKRenderContext* rc) = 0; virtual void OnResetDevice(CKRenderContext* rc) = 0; //-----------------------------------------------------------------------// // Support //-----------------------------------------------------------------------// public: virtual CKBOOL IsSupported() const = 0; virtual CKBOOL IsSupportedAndWarnIfNot() = 0; virtual void GetVSPSVersion(float& vs, float& ps) const = 0; //-----------------------------------------------------------------------// // Shader Compilation & Automatics variables //-----------------------------------------------------------------------// public: virtual CKShader* CreateShader( const XString* name = NULL, const XString* text = NULL, BOOL uniqueName = TRUE ) = 0; virtual void DeleteShader(CKShader* fx) = 0; virtual CKShader* CreateShaderFromFile(const CKSTRING filename) = 0; virtual bool SaveShaderToFile(const XString& filename, CKShader* fx) = 0; virtual bool CompileShader(CKShader* fx, XClassArray &output) = 0; virtual bool CompileShaderOutput(CKShader* fx, const CKSTRING funcname, const CKSTRING target, XClassArray &output, XArray& text) = 0; virtual CKShader* GetShaderByName(const XBaseString& name) = 0; virtual int GetNumShaders() const = 0; virtual CKShader* GetShader(int pos) = 0; virtual void BeginShaders( CKRenderContext* rc ) = 0; virtual void EndShaders( CKRenderContext* rc ) = 0; virtual int GetSemanticIndexFromString( XString& iStr ) = 0; virtual const XClassArray& GetSemanticOriginalNames() = 0; virtual void GetSemanticDesc( int iSemIndex, XString*& oSemDesc ) = 0; virtual const XClassArray& GetAnnotationOriginalNames() = 0; virtual int GetTangentSpaceCreationMode() const = 0; virtual void SetTangentSpaceCreationMode( ShaderTSCreationMode iTSCreationMode ) = 0; //-----------------------------------------------------------------------// // Default Shader //-----------------------------------------------------------------------// public: virtual CKShader* GetDefaultShader() = 0; virtual CKShader* GetDefaultShaderI() = 0; virtual CKShader* GetShadowShader() = 0; /******************************************************************* Summary: Called when a RenderContext gets created or destroyed to update the Shader Manager's inner list of render contexts *******************************************************************/ virtual void OnRenderContextCreated( CKRenderContext* rc ) = 0; virtual void OnRenderContextDestroyed( CKRenderContext* rc ) = 0; public: CKContext* m_Context; CKShader* m_DefaultShader; CKShader* m_ShadowShader; XArray m_AllShaders; XClassArray m_Output; CKDWORD m_RenderOptionsBeforePlay; //--- Those members are meant to be accessed from Meanings int m_CurrentPassCount; int m_CurrentPassIndex; CKTexture* m_PseudoChannelTexture[MaxChannelCount]; bool m_SavePreProcessed; XString m_SavePreprocessedOptions; CK_SHADER_MANAGER_TYPE m_Type; }; #endif