From: <axl...@us...> - 2008-12-13 17:26:51
|
Revision: 75 http://hgengine.svn.sourceforge.net/hgengine/?rev=75&view=rev Author: axlecrusher Date: 2008-12-13 17:26:41 +0000 (Sat, 13 Dec 2008) Log Message: ----------- Add semaphore to renderables Modified Paths: -------------- Mercury2/src/RenderableNode.cpp Mercury2/src/RenderableNode.h Modified: Mercury2/src/RenderableNode.cpp =================================================================== --- Mercury2/src/RenderableNode.cpp 2008-12-13 17:23:05 UTC (rev 74) +++ Mercury2/src/RenderableNode.cpp 2008-12-13 17:26:41 UTC (rev 75) @@ -19,6 +19,12 @@ m_postrender.clear(); } +void RenderableNode::Update(float dTime) +{ + MSemaphoreIncOnDestroy s( &m_semaphore ); + while (m_semaphore.ReadValue() != 0); +} + void RenderableNode::Render() { list< MercuryAsset* >::iterator i; @@ -87,9 +93,15 @@ return false; } -void RenderableNode::RecursiveRender( const MercuryNode* n ) +void RenderableNode::RecursiveRender( MercuryNode* n ) { - if ( Cast(n) ) ((RenderableNode*)n)->Render(); + RenderableNode* rn; + if ( rn = Cast(n) ) + { + MSemaphoreDecOnDestroy s( &(rn->m_semaphore) ); + while (rn->m_semaphore.ReadValue() != 1); + rn->Render(); + } const list< MercuryNode* >& children = n->Children(); list< MercuryNode* >::const_iterator i; Modified: Mercury2/src/RenderableNode.h =================================================================== --- Mercury2/src/RenderableNode.h 2008-12-13 17:23:05 UTC (rev 74) +++ Mercury2/src/RenderableNode.h 2008-12-13 17:26:41 UTC (rev 75) @@ -5,6 +5,7 @@ #include <MAutoPtr.h> #include <MercuryAsset.h> #include <MercuryMatrix.h> +#include <MSemaphore.h> #define MCHECKASSETS @@ -15,7 +16,7 @@ ~RenderableNode(); virtual void Render(); - virtual void Update(float dTime) {}; + virtual void Update(float dTime); ///Returnes true if N is of type RenderableNode // static bool IsMyType( MercuryNode* n ); @@ -26,7 +27,7 @@ void AddRender(MercuryAsset* asset); void AddPostRender(MercuryAsset* asset); - static void RecursiveRender( const MercuryNode* n ); + static void RecursiveRender( MercuryNode* n ); virtual void LoadFromXML(const XMLNode& node); const MercuryMatrix& FindGlobalMatrix() const; @@ -47,6 +48,8 @@ std::list< MercuryAsset* > m_prerender; std::list< MercuryAsset* > m_render; std::list< MercuryAsset* > m_postrender; + + MSemaphore m_semaphore; }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |