182 lines
5.4 KiB
C++
182 lines
5.4 KiB
C++
#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<XString> &output) = 0;
|
|
virtual bool CompileShaderOutput(CKShader* fx, const CKSTRING funcname,
|
|
const CKSTRING target, XClassArray<XString> &output, XArray<char>& 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<XString>& GetSemanticOriginalNames() = 0;
|
|
virtual void GetSemanticDesc( int iSemIndex, XString*& oSemDesc ) = 0;
|
|
|
|
virtual const XClassArray<XString>& 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<CKShader*> m_AllShaders;
|
|
XClassArray<XString> 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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|