"L. Spiro Engine"
|
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__