/////////////////////////////////////////////////////////////////////////////// // // ## ###### // ###### ### // ## ############### Shark 3D Engine (www.shark3d.com) // ########## # # # // ######## Copyright (c) 1996-2006 Spinor GmbH. // ######### # # # All rights reserved. // ## ########## // ## // /////////////////////////////////////////////////////////////////////////////// //@cpp #ifndef S3D_ENG_SHADER_STD_PAINTMESH_CLOD_H #define S3D_ENG_SHADER_STD_PAINTMESH_CLOD_H #include "eng/interf/eng_shader.h" #include "eng/interf/eng_shaderenv.h" #include "eng/util/eng_util_lightutil.h" #include "comp/core/comp_setup.h" #include "comp/util/comp_util_uniquebase.h" namespace Geometry { class LodStripsLibrary; class IndexData; } /////////////////////////////////////////////////////////////////////////////// //@ struct s3d_CEngShaderStdPaintMeshBatch { bool m_Complete; s3d_CEngGfxBatchArray m_BatchArray; }; //@ typedef s3d_CUtilKeyEntry s3d_CEngShaderStdPaintMeshBatchKeyEntry; //@ typedef s3d_CUtilArray s3d_CEngShaderStdPaintMeshBatchKeyArray; /////////////////////////////////////////////////////////////////////////////// class s3d_CEngShaderStdPaintMeshGfx; //@ typedef s3d_CUtilKeyEntry s3d_CEngShaderStdPaintMeshGfxEntry; //@ typedef s3d_CUtilTree s3d_CEngShaderStdPaintMeshGfxTree; /////////////////////////////////////////////////////////////////////////////// struct s3d_CEngShaderStdPaintMeshData: s3d_CUtilPtrBase { s3d_CUtilStr m_Info; s3d_CUtilAtomArray m_MethodArray; int m_Rank; bool m_BackToFront; bool m_FrontToBack; int m_PaintMode; float m_PaintExt; int m_CullMode; int m_DepthTest; bool m_DepthWrite; float m_DepthBiasOverlay; float m_DepthBiasOffs; bool m_FogEnabled; bool m_FogBlack; int m_BlendColSrcFac; int m_BlendColDestFac; int m_BlendColOp; int m_BlendAlphaSrcFac; int m_BlendAlphaDestFac; int m_BlendAlphaOp; float m_Alpha; s3d_CUtilVec3f m_Color; s3d_CUtilStr m_AlphaVarInfo; s3d_CUtilAtomPtr m_AlphaVarAtom; s3d_CUtilStr m_ColorVarInfo; s3d_CUtilAtomPtr m_ColorVarAtom; int m_AlphaTestMode; float m_AlphaRef; s3d_CUtilStr m_LightArrayVarInfo; s3d_CUtilAtomPtr m_LightArrayVarAtom; s3d_CEngUtilMtlPtr m_Mtl; bool m_UseVertexBoneWgh; bool m_UseVertexBoneSubscr; bool m_UseVertexPoint; bool m_UseVertexNormal; bool m_UseVertexColorAlpha; s3d_CUtilStr m_ProgIdent, m_ProgInfo; s3d_CUtilStr m_ProgParamInfo; s3d_CUtilAtomPairArray m_ProgParamMapArray; s3d_CUtilStr m_TexChanVarInfo; s3d_CUtilAtomArray m_TexChanVarAtomArray; s3d_CUtilStr m_AttrVarInfo; s3d_CUtilAtomArray m_AttrVarAtomArray; s3d_CUtilStr m_AttrMatVarInfo; s3d_CUtilAtomArray m_AttrMatVarAtomArray; s3d_CUtilStr m_MeshVarInfo; s3d_CUtilAtomPtr m_MeshVarAtom; s3d_CUtilAtomPtr m_InspAtom; // GAMETOOLS: declare the name of the .mesh s3d_CUtilStr m_LODMeshFileIdent, m_LODMeshFileInfo; bool m_Dyn; }; typedef s3d_CUtilPtr s3d_CEngShaderStdPaintMeshDataPtr; /////////////////////////////////////////////////////////////////////////////// //@ class s3d_CEngShaderStdPaintMesh : public s3d_CEngShader, public s3d_CCompUtilUniqueBase, public s3d_CCompSetup { public: S3D_UTIL_RTTI_TABLE_DECLARE //@ s3d_CEngShaderStdPaintMesh(); //@ void SetupInit( s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info, s3d_CCompSuppl *FetchSuppl, s3d_CUtilSnkChunk *Param); //@ void SetupDone(); //@ s3d_CUtilStr GetInfo(); //@ void RegisterNotif(s3d_CUtilNotifRecip *Recip); //@ s3d_CEngShaderGfxPtr FindShaderGfx( s3d_CUtilNotifGather *NotifGather, s3d_CEngGfxCtx *GfxCtx); private: s3d_CEngShaderEnvPtr m_ShaderEnv; s3d_CEngShaderStdPaintMeshGfxTree m_ShaderGfxTree; s3d_CEngShaderStdPaintMeshDataPtr m_Data; }; //@ typedef s3d_CUtilPtr s3d_CEngShaderStdPaintMeshPtr; /////////////////////////////////////////////////////////////////////////////// //@ class s3d_CEngShaderStdPaintMeshGfx: public s3d_CEngShaderGfx { public: //@ s3d_CEngShaderStdPaintMeshGfx( s3d_CEngShaderEnv *ShaderEnv, s3d_CUtilNotifGather *NotifGather, s3d_CEngGfxCtx *GfxCtx, s3d_CEngShaderStdPaintMeshData *Data); //@ s3d_CEngShaderStdPaintMeshGfxTree::CNode *GetNode(); //@ void RegisterNotif(s3d_CUtilNotifRecip *Recip); //@ void ExtractGfx(); //@ bool IsValid(); //@ void LinkCollect(s3d_CUtilAtomSet &VarAtomSet); //@ void LinkAppoint(s3d_CDrvVarDecl *VarDecl); //@ s3d_CEngShaderInstPtr CreateShaderInst( s3d_CEngShaderHead *Head); private: s3d_CEngShaderStdPaintMeshGfxTree::CNode m_Node; s3d_CEngShaderEnvPtr m_ShaderEnv; s3d_CEngShaderStdPaintMeshDataPtr m_Data; // ShaderGfx-Data Variables: s3d_CEngGfxProgPtr m_GfxProg; s3d_CDrvVarSlotInit m_AlphaVarSlot; s3d_CDrvVarSlotInit m_ColorVarSlot; s3d_CDrvVarSlotInit m_LightArrayVarSlot; s3d_CDrvVarSlotInit m_MeshVarSlot; s3d_CDrvVarDeclPtr m_ProgParamDecl; s3d_CDrvVarSlotArray m_TexChanVarSlotArray; s3d_CDrvVarSlotArray m_AttrVarSlotArray; s3d_CDrvVarSlotArray m_AttrMatVarSlotArray; friend class s3d_CEngShaderStdPaintMeshInst; }; //@ typedef s3d_CUtilPtr s3d_CEngShaderStdPaintMeshGfxPtr; /////////////////////////////////////////////////////////////////////////////// //@ class s3d_CEngShaderStdPaintMeshInst : public s3d_CEngShaderInst, public s3d_CEngShaderExec { public: //@ s3d_CEngShaderStdPaintMeshInst( s3d_CEngShaderEnv *ShaderEnv, s3d_CEngGfxCtx *GfxCtx, s3d_CEngShaderHead *Head, s3d_CEngShaderStdPaintMeshGfx *ShaderGfx, s3d_CEngGfxProg *GfxProg); //@ void RegisterNotif(s3d_CUtilNotifRecip *Recip); //@ void SetShaderCtx(s3d_CEngShaderCtx *ShaderCtx); //@ void SetGfxState(s3d_CEngGfxState *GfxState); //@ void SetPos(s3d_CEngPos *Pos); //@ void SetModel(s3d_CEngModel *Model); //@ void ArrangeCollect( s3d_CUtilMemPool *MemPool, s3d_CEngShaderScopeArray &ScopeArray); //@ void ArrangeInit( s3d_CUtilMemPool *MemPool, s3d_CEngShaderScopeArray_cr ScopeArray); //@ void ArrangePerform( s3d_CUtilMemPool *MemPool, s3d_CEngShaderScopeArray_cr ScopeArray); //@ void ArrangeFeedback( s3d_CUtilMemPool *MemPool, s3d_CEngShaderScopeArray_cr ScopeArray); //@ void ArrangeGather( s3d_CEngShaderExecArray &ExecArray); //@ void ShaderExecPerform( s3d_CEngShaderScope *Scope, s3d_CUtilAtom *Method, s3d_CEngGfxTaskArray &TaskArray); //@ void *GfxElemJobExec( s3d_CEngShaderScope *Scope, void *GfxMark); private: s3d_CDrvGfxCharge *CreateChargeArray( s3d_CUtilMemPool *MemPool, s3d_CEngShaderScope *Scope, const s3d_CEngMeshData *MeshData, bool Quiet); void ExecStatic( s3d_CEngShaderScope *Scope, s3d_CDrvGfxEng *GfxEng); void ExecDyn( s3d_CEngShaderScope *Scope, s3d_CDrvGfxEng *GfxEng, s3d_CUtilVec3f &Color, float &Alpha); void ExecLighting( s3d_CEngShaderScope *Scope, s3d_CDrvGfxEng *GfxEng, float Alpha); void ErrorNoBoneWghBank( s3d_CUtilStr_cr Info, const s3d_CEngMeshData *MeshData); void ErrorNoBoneSubscrBank( s3d_CUtilStr_cr Info, const s3d_CEngMeshData *MeshData); void ErrorNoPointBank( s3d_CUtilStr_cr Info, const s3d_CEngMeshData *MeshData); void ErrorNoNormalBank( s3d_CUtilStr_cr Info, const s3d_CEngMeshData *MeshData); void ErrorNoColorAlphaBank( s3d_CUtilStr_cr Info, const s3d_CEngMeshData *MeshData); s3d_CEngShaderEnvPtr m_ShaderEnv; s3d_CEngGfxCtxPtr m_GfxCtx; s3d_CEngShaderStdPaintMeshGfxPtr m_ShaderGfx; s3d_CEngShaderStdPaintMeshBatchKeyArray m_BatchArray; s3d_CEngGfxProgPtr m_ProgGfx; // GAMETOOLS s3d_CEngGfxState *theGfxState; Geometry::LodStripsLibrary *lodStrips; Geometry::IndexData *geoIndexData; }; //@ typedef s3d_CUtilPtr s3d_CEngShaderStdPaintMeshGfxPtr; /////////////////////////////////////////////////////////////////////////////// #endif