"L. Spiro Engine"

F:/My Projects/LSEngine/Modules/LSEngine/Src/Models/LSEDrawableMeshInstance.h

00001 
00016 #ifndef __LSE_DRAWABLEMESHINSTANCE_H__
00017 #define __LSE_DRAWABLEMESHINSTANCE_H__
00018 
00019 #include "../LSEEngine.h"
00020 #include "LSEMeshInstance.h"
00021 #include "Models/LSDIntermediateDrawableMeshInstance.h"
00022 #include "RenderQueue/LSGRenderQueueClient.h"
00023 #include "RenderQueue/LSGRenderQueueSet.h"
00024 
00025 namespace lse {
00026 
00033         class CDrawableMeshInstance : public CMeshInstance, public CRenderQueueClient {
00034         public :
00035                 // == Various constructors.
00036                 LSE_CALLCTOR                                                                    CDrawableMeshInstance();
00037                 LSE_CALLCTOR                                                                    ~CDrawableMeshInstance();
00038 
00039 
00040                 // == Types.
00044                 typedef struct LSE_RENDER_PART {
00048                         CVector<CIntermediateDrawableMeshInstance::LSD_RENDER_LAYER>
00049                                                                                                                 vRenderLayers;
00050 
00054                         CIntermediateDrawableMeshInstance::LSD_RENDER_TYPE_DATA
00055                                                                                                                 rtdDefault;
00056 
00060                         CIntermediateDrawableMeshInstance::LSD_RENDER_TYPE_DATA
00061                                                                                                                 rtdAmbient;
00062 
00066                         CIntermediateDrawableMeshInstance::LSD_RENDER_TYPE_DATA
00067                                                                                                                 rtdLighting;
00068 
00072                         CIntermediateDrawableMeshInstance::LSD_RENDER_TYPE_DATA
00073                                                                                                                 rtdShadowMap;
00074 
00078                         LSG_RENDER_QUEUE_ITEM                                           rqiStandardQueueItem;
00079 
00083                         LSG_RENDER_QUEUE_ITEM                                           rqiAmbientQueueItem;
00084 
00088                         LSG_RENDER_QUEUE_ITEM                                           rqiLightingQueueItem;
00089 
00093                         LSG_RENDER_QUEUE_ITEM                                           rqiShadowMapQueueItem;
00094 
00095 
00096                         // == Various constructors.
00097                         LSE_CALLCTOR                                                            LSE_RENDER_PART();
00098                         LSE_CALLCTOR                                                            ~LSE_RENDER_PART();
00099 
00100 
00101                         // == Operators.
00108                         LSE_RENDER_PART & LSE_CALL                                      operator = ( const LSE_RENDER_PART &_rpOther );
00109                 } * LPLSE_RENDER_PART, * const LPCLSE_RENDER_PART;
00110 
00111 
00112                 // == Functions.
00118                 LSE_INLINE const CIntermediateDrawableMeshInstance * LSE_CALL
00119                                                                                                                 GetDrawableMesh() const;
00120 
00124                 virtual LSVOID LSE_CALL                                                 Reset();
00125 
00135                 LSVOID LSE_CALL                                                                 AddToRenderQueue( CRenderQueueSet &_rqsSet, LSUINT32 _ui32Pass, LSG_RENDER_TYPE _rtType,
00136                         const CVector3 &_vCamPos, const CVector3 &_vCamDir );
00137 
00144                 LSE_INLINE CVector<LSE_RENDER_PART> & LSE_CALL  RenderParts();
00145 
00151                 LSE_INLINE const CVector<LSE_RENDER_PART> & LSE_CALL
00152                                                                                                                 RenderParts() const;
00153 
00164                 virtual LSVOID LSE_CALL                                                 FinalRender( LSG_RENDER_TYPE _rtRenderType, LSUINTPTR _uiptrUser );
00165 
00172                 virtual LSVOID LSE_CALL                                                 FinalRenderStandard( LSUINTPTR _uiptrUser );
00173 
00180                 virtual LSVOID LSE_CALL                                                 FinalRenderAmbientOnly( LSUINTPTR _uiptrUser );
00181 
00188                 virtual LSVOID LSE_CALL                                                 FinalRenderLighting( LSUINTPTR _uiptrUser );
00189 
00196                 virtual LSVOID LSE_CALL                                                 FinalRenderShadowMap( LSUINTPTR _uiptrUser );
00197 
00203                 LSE_INLINE LSBOOL LSE_CALL                                              CastsShadow() const;
00204 
00210                 LSE_INLINE LSVOID LSE_CALL                                              SetCastsShadow( LSBOOL _bValue );
00211 
00217                 LSE_INLINE LSBOOL LSE_CALL                                              ReceivesShadows() const;
00218 
00224                 LSE_INLINE LSVOID LSE_CALL                                              SetReceivesShadows( LSBOOL _bValue );
00225 
00231                 LSE_INLINE LSBOOL LSE_CALL                                              VertexLighting() const;
00232 
00238                 LSE_INLINE LSVOID LSE_CALL                                              SetVertexLighting( LSBOOL _bValue );
00239 
00245                 LSE_INLINE LSBOOL LSE_CALL                                              CellShading() const;
00246 
00252                 LSE_INLINE LSVOID LSE_CALL                                              SetCellShading( LSBOOL _bValue );
00253 
00259                 LSE_INLINE LSBOOL LSE_CALL                                              CookTorranceShading() const;
00260 
00266                 LSE_INLINE LSVOID LSE_CALL                                              SetCookTorranceShading( LSBOOL _bValue );
00267 
00273                 LSVOID LSE_CALL                                                                 DebugRender( LSBOOL _bOpaque );
00274 
00275 
00276         protected :
00277                 // == Members.
00281                 CVector<LSE_RENDER_PART>                                                m_vRenderParts;
00282 
00286                 CIntermediateDrawableMeshInstance *                             m_pidmiSharedDrawableMesh;
00287 
00291                 LSBOOL                                                                                  m_bCastsShadow          : 1;
00292 
00296                 LSBOOL                                                                                  m_bReceivesShadows      : 1;
00297 
00301                 LSBOOL                                                                                  m_bPerVertexLighting: 1;
00302 
00306                 LSBOOL                                                                                  m_bCellShading          : 1;
00307 
00311                 LSBOOL                                                                                  m_bCookTorrance         : 1;
00312 
00313 
00314                 // == Functions.
00321                 virtual LSBOOL LSE_CALL                                                 SetDrawableMesh( CIntermediateDrawableMeshInstance * _pimiSharedMesh );
00322 
00330                 LSBOOL LSE_CALL                                                                 UpdateRenderPart( CIntermediateDrawableMeshInstance::LSD_RENDER_TYPE_DATA &_rtdData,
00331                         LSUINT32 _ui32Index );
00332 
00340                 LSBOOL LSE_CALL                                                                 UpdateRenderPartShadowMap( CIntermediateDrawableMeshInstance::LSD_RENDER_TYPE_DATA &_rtdData,
00341                         LSUINT32 _ui32Index );
00342 
00349                 LSVOID LSE_CALL                                                                 RenderPart( CIntermediateDrawableMeshInstance::LSD_RENDER_TYPE_DATA &_rtdData,
00350                         LSUINT32 _ui32Index );
00351 
00358                 LSVOID LSE_CALL                                                                 RenderPartShadowMap( CIntermediateDrawableMeshInstance::LSD_RENDER_TYPE_DATA &_rtdData,
00359                         LSUINT32 _ui32Index );
00360 
00361 
00362         private :
00363                 typedef CMeshInstance                                                   Parent;
00364                 friend class                                                                    CDrawableModelInstance;
00365         };
00366 
00367 
00368         // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
00369         // DEFINITIONS
00370         // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
00371         // == Functions.
00377         LSE_INLINE const CIntermediateDrawableMeshInstance * LSE_CALL CDrawableMeshInstance::GetDrawableMesh() const {
00378                 return reinterpret_cast<CIntermediateDrawableMeshInstance *>(m_pimiSharedMesh);
00379         }
00380 
00387         LSE_INLINE CVector<CDrawableMeshInstance::LSE_RENDER_PART> & LSE_CALL CDrawableMeshInstance::RenderParts() {
00388                 return m_vRenderParts;
00389         }
00390 
00396         LSE_INLINE const CVector<CDrawableMeshInstance::LSE_RENDER_PART> & LSE_CALL CDrawableMeshInstance::RenderParts() const {
00397                 return m_vRenderParts;
00398         }
00399 
00405         LSE_INLINE LSBOOL LSE_CALL CDrawableMeshInstance::CastsShadow() const {
00406                 return m_bCastsShadow;
00407         }
00408 
00414         LSE_INLINE LSVOID LSE_CALL CDrawableMeshInstance::SetCastsShadow( LSBOOL _bValue ) {
00415                 m_bCastsShadow = _bValue != 0;
00416         }
00417 
00423         LSE_INLINE LSBOOL LSE_CALL CDrawableMeshInstance::ReceivesShadows() const {
00424                 return m_bReceivesShadows;
00425         }
00426 
00432         LSE_INLINE LSVOID LSE_CALL CDrawableMeshInstance::SetReceivesShadows( LSBOOL _bValue ) {
00433                 m_bReceivesShadows = _bValue != 0;
00434         }
00435 
00441         LSE_INLINE LSBOOL LSE_CALL CDrawableMeshInstance::VertexLighting() const {
00442                 return m_bPerVertexLighting;
00443         }
00444 
00450         LSE_INLINE LSVOID LSE_CALL CDrawableMeshInstance::SetVertexLighting( LSBOOL _bValue ) {
00451                 m_bPerVertexLighting = _bValue != 0;
00452         }
00453 
00459         LSE_INLINE LSBOOL LSE_CALL CDrawableMeshInstance::CellShading() const {
00460                 return m_bCellShading;
00461         }
00462 
00468         LSE_INLINE LSVOID LSE_CALL CDrawableMeshInstance::SetCellShading( LSBOOL _bValue ) {
00469                 m_bCellShading = _bValue != 0;
00470         }
00471 
00477         LSE_INLINE LSBOOL LSE_CALL CDrawableMeshInstance::CookTorranceShading() const {
00478                 return m_bCookTorrance;
00479         }
00480 
00486         LSE_INLINE LSVOID LSE_CALL CDrawableMeshInstance::SetCookTorranceShading( LSBOOL _bValue ) {
00487                 m_bCookTorrance = _bValue != 0;
00488         }
00489 
00490 }       // namespace lse
00491 
00492 #endif  // __LSE_DRAWABLEMESHINSTANCE_H__
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator