248 lines
8.6 KiB
C++
248 lines
8.6 KiB
C++
#ifndef ShaderManagerDX8_H
|
|
#define ShaderManagerDX8_H "$Id:$"
|
|
|
|
#include "CKBaseManager.h"
|
|
#include "RCKShaderDX8.h"
|
|
|
|
#ifdef _XBOX
|
|
#undef CompileShader
|
|
#endif
|
|
//-----------------------------------------------------------------------------
|
|
// Shader Automatic Info
|
|
class ShaderAutomaticInfoDX8 {
|
|
public:
|
|
//--- Static information
|
|
XString m_name; // XString Name of the parameter
|
|
#ifndef _XBOX
|
|
XString m_desc;
|
|
int m_typeSize;
|
|
#endif
|
|
D3DXPARAMETERTYPE m_d3dType;
|
|
#ifdef _XBOX
|
|
DWORD m_dName; // 4CC Name of the param
|
|
#endif
|
|
};
|
|
|
|
BOOL _WinExec(const XString& command);
|
|
|
|
typedef XArray<D3DXHANDLE> ExposedLocalParamsPerRC;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Shader Manager Class
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
class ShaderManagerDX8 : public CKShaderManager
|
|
{
|
|
public:
|
|
ShaderManagerDX8(CKContext *Context);
|
|
~ShaderManagerDX8();
|
|
//--------------------------------------------------------------
|
|
// Methods to implement
|
|
//--------------------------------------------------------------
|
|
//--- Called to save manager data. return NULL if nothing to save...
|
|
virtual CKStateChunk* SaveData(CKFile* SavedFile);
|
|
|
|
//--- Called to load manager data.
|
|
virtual CKERROR LoadData(CKStateChunk *chunk,CKFile* LoadedFile);
|
|
|
|
//--- Called before the end of a CKContext::ClearAll operation.
|
|
virtual CKERROR PreClearAll();
|
|
|
|
//--- Called at the end of a CKContext::ClearAll operation.
|
|
virtual CKERROR PostClearAll();
|
|
|
|
//--- Called at deletion of a CKContext
|
|
virtual CKERROR OnCKEnd();
|
|
|
|
//--- Called at the end of the creation of a CKContext.
|
|
virtual CKERROR OnCKInit();
|
|
|
|
//--- Called at the end of a load operation.
|
|
virtual CKERROR PostLoad() { return CK_OK; }
|
|
|
|
//--- Called at the end of a save operation.
|
|
virtual CKERROR PostSave() { return CK_OK; }
|
|
|
|
virtual CKERROR OnRasterizerEvent(CKRST_EVENTS Event,CKRenderContext* dev);
|
|
|
|
//--- 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_OnCKInit|
|
|
CKMANAGER_FUNC_PostLoad|
|
|
CKMANAGER_FUNC_PostSave|
|
|
CKMANAGER_FUNC_OnRasterizerEvent;
|
|
|
|
}
|
|
|
|
//--------------------------------------------------------------
|
|
// Unused methods
|
|
//--------------------------------------------------------------
|
|
// virtual CKERROR SequenceAddedToScene(CKScene *scn,CK_ID *objids,int count) { return CK_OK; }
|
|
// virtual CKERROR SequenceRemovedFromScene(CKScene *scn,CK_ID *objids,int count){ return CK_OK; }
|
|
// virtual CKERROR OnPostBackToFront(CKRenderContext* dev) { return CK_OK; }
|
|
// virtual CKERROR OnPreBackToFront(CKRenderContext* dev) { return CK_OK; }
|
|
// virtual CKERROR PreClearAll() { return CK_OK; }
|
|
// virtual CKERROR OnPostCopy(CKDependenciesContext& context) { return CK_OK; }
|
|
// virtual CKERROR OnPreCopy(CKDependenciesContext& context) { return CK_OK; }
|
|
// virtual CKERROR SequenceDeleted(CK_ID *objids,int count) { return CK_OK; }
|
|
// virtual CKERROR SequenceToBeDeleted(CK_ID *objids,int count) { return CK_OK; }
|
|
// virtual CKERROR OnPostFullScreen(BOOL Going2Fullscreen,CKRenderContext* dev) { return CK_OK; }
|
|
// virtual CKERROR OnPreFullScreen(BOOL Going2Fullscreen, CKRenderContext* dev) { return CK_OK; }
|
|
// virtual CKERROR PreLoad() { return CK_OK; }
|
|
// virtual CKERROR PostLaunchScene(CKScene* OldScene,CKScene* NewScene) { return CK_OK; }
|
|
// virtual CKERROR PreLaunchScene(CKScene* OldScene,CKScene* NewScene) { return CK_OK; }
|
|
// virtual CKERROR OnCKPause() { return CK_OK; }
|
|
// virtual CKERROR OnCKPlay() { return CK_OK; }
|
|
// virtual CKERROR PostProcess() { return CK_OK; }
|
|
// virtual CKERROR PreProcess() { return CK_OK; }
|
|
// virtual CKERROR OnPostRender(CKRenderContext* dev) { return CK_OK; }
|
|
// virtual CKERROR OnPreRender(CKRenderContext* dev) { return CK_OK; }
|
|
// virtual CKERROR OnCKPostReset() { return CK_OK; }
|
|
// virtual CKERROR OnCKReset() { return CK_OK; }
|
|
// virtual CKERROR PreSave() { return CK_OK; }
|
|
// virtual CKERROR OnPostSpriteRender(CKRenderContext* dev) { return CK_OK; }
|
|
|
|
protected:
|
|
virtual void OnCreateDevice(CKRenderContext* rc);
|
|
virtual void OnDestroyDevice(CKRenderContext* rc);
|
|
virtual void OnLostDevice(CKRenderContext* rc);
|
|
virtual void OnResetDevice(CKRenderContext* rc);
|
|
|
|
//-----------------------------------------------------------------------//
|
|
// Support
|
|
//-----------------------------------------------------------------------//
|
|
public:
|
|
// Is supported only if the driver is Direct X 9.
|
|
virtual CKBOOL IsSupported() const;
|
|
virtual CKBOOL IsSupportedAndWarnIfNot();
|
|
virtual void GetVSPSVersion(float& vs, float& ps) const;
|
|
|
|
//-----------------------------------------------------------------------//
|
|
// Shader Compilation & Automatics variables
|
|
//-----------------------------------------------------------------------//
|
|
public:
|
|
virtual CKShader* CreateShader(
|
|
const XString* name = NULL,
|
|
const XString* text = NULL,
|
|
BOOL uniqueName = TRUE );
|
|
|
|
virtual void DeleteShader(CKShader* fx);
|
|
virtual CKShader* CreateShaderFromFile(const CKSTRING filename);
|
|
virtual bool SaveShaderToFile(const XString& filename, CKShader* fx);
|
|
virtual bool CompileShader(CKShader* fx, XClassArray<XString> &output);
|
|
virtual bool CompileShaderOutput(CKShader* fx, const CKSTRING funcname,
|
|
const CKSTRING target, XClassArray<XString> &output, XArray<char>& text);
|
|
virtual CKShader* GetShaderByName(const XBaseString& name);
|
|
virtual int GetNumShaders() const;
|
|
virtual CKShader* GetShader(int pos);
|
|
|
|
virtual void BeginShaders(CKRenderContext* rc);
|
|
virtual void EndShaders(CKRenderContext* rc);
|
|
|
|
virtual void SetRegAutomaticName( ShaderAutomaticParameter index, const XString& iName );
|
|
virtual XString& GetRegAutomaticName( ShaderAutomaticParameter index, int NameIndex =0);
|
|
|
|
virtual XString& GetRegAutomaticDesc( ShaderAutomaticParameter index );
|
|
|
|
public:
|
|
BOOL IsAutomatic( const D3DXPARAMETER_DESC& desc ) const;
|
|
|
|
ShaderAutomaticInfoDX8& GetRegAutomaticInfo( ShaderAutomaticParameter index );
|
|
|
|
protected:
|
|
void _SetRegAutomaticInfo( ShaderAutomaticParameter index,
|
|
const ShaderAutomaticInfoDX8& iSai );
|
|
void _SetRegAutomaticInfo( ShaderAutomaticParameter index,
|
|
const XString& iName,
|
|
D3DXPARAMETERTYPE iD3DType,
|
|
int iTypeSize,
|
|
const char* iDesc=NULL );
|
|
|
|
D3DXHANDLE _FindAutomaticParameter( CKShader& rfx,
|
|
ShaderAutomaticParameter index,
|
|
CKRenderContext* rc );
|
|
void _RegisterAutomatics();
|
|
|
|
BOOL _ReadStringFromFile(const XString& filename, XString &s) const;
|
|
BOOL _WriteStringToFile(const XString& filename, const XString &s) const;
|
|
|
|
protected:
|
|
XString m_FXCCommand;
|
|
XString m_FXPCommand;
|
|
XString m_XBECCommand;
|
|
|
|
ShaderAutomaticInfoDX8 m_RegisteredAutomatics[FXAP_MAXSIZE];
|
|
int m_NextCompID;
|
|
|
|
//-----------------------------------------------------------------------//
|
|
// Default Shader
|
|
//-----------------------------------------------------------------------//
|
|
|
|
public:
|
|
virtual CKShader* GetDefaultShader();
|
|
virtual CKShader* GetDefaultShaderI();
|
|
virtual CKShader* GetShadowShader()
|
|
{
|
|
XASSERT(0);
|
|
return NULL;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------//
|
|
// View Structure
|
|
//-----------------------------------------------------------------------//
|
|
/****************************************************************
|
|
Summary: Gets the render context index.
|
|
Arguments:
|
|
iRc: the render context
|
|
Return Value:
|
|
The render context index or -1 if not found.
|
|
Remarks:
|
|
Gets the render context index among the whole list of render
|
|
context.
|
|
See Also:
|
|
*******************************************************************/
|
|
int _GetRenderContextIndex( CKRenderContext* rc );
|
|
XArray<CKRenderContext*> m_rcList;
|
|
XHashTable<int, CKParameterLocal*> m_hashParamIndex;
|
|
XClassArray<ExposedLocalParamsPerRC> m_paramLinker;
|
|
|
|
/*******************************************************************
|
|
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 );
|
|
virtual void OnRenderContextDestroyed( CKRenderContext* rc );
|
|
|
|
void _AddRCForExposedParameters();
|
|
void _RemoveRCForExposedParameters( int rcIndex );
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|