From: <axl...@us...> - 2009-04-04 23:23:26
|
Revision: 199 http://hgengine.svn.sourceforge.net/hgengine/?rev=199&view=rev Author: axlecrusher Date: 2009-04-04 23:23:21 +0000 (Sat, 04 Apr 2009) Log Message: ----------- new render graph setup Modified Paths: -------------- Mercury2/src/RenderGraph.cpp Mercury2/src/RenderableNode.cpp Mercury2/src/RenderableNode.h Mercury2/src/Viewport.cpp Mercury2/src/Viewport.h Modified: Mercury2/src/RenderGraph.cpp =================================================================== --- Mercury2/src/RenderGraph.cpp 2009-04-04 19:54:12 UTC (rev 198) +++ Mercury2/src/RenderGraph.cpp 2009-04-04 23:23:21 UTC (rev 199) @@ -1,15 +1,41 @@ +#include <MercuryMatrix.h> #include <RenderGraph.h> +#include <GL/gl.h> + void RenderGraphEntry::Render() { - if (m_node) m_node->Render(); + MercuryMatrix m; + + if (m_node) + { + if ( !(m_node->IsHidden() || m_node->IsCulled()) ) + { + m = m_node->FindGlobalMatrix(); + m.Transpose(); + glLoadMatrixf( m.Ptr() ); + m_node->PreRender( m ); + m_node->Render( m ); + } + } + std::list< RenderGraphEntry >::iterator i; for (i = m_children.begin(); i != m_children.end(); ++i ) i->Render(); + + if (m_node) + { + if ( !(m_node->IsHidden() || m_node->IsCulled()) ) + { + glLoadMatrixf( m.Ptr() ); + m_node->PostRender( m ); + } + } } void RenderGraph::Build( MercuryNode* node ) { + printf("rebuilding render graph\n"); m_root = RenderGraphEntry(); Build(node, m_root); } Modified: Mercury2/src/RenderableNode.cpp =================================================================== --- Mercury2/src/RenderableNode.cpp 2009-04-04 19:54:12 UTC (rev 198) +++ Mercury2/src/RenderableNode.cpp 2009-04-04 23:23:21 UTC (rev 199) @@ -38,22 +38,23 @@ } } -void RenderableNode::Render() +void RenderableNode::PreRender(const MercuryMatrix& matrix) { list< MercuryAsset* >::iterator i; - MercuryMatrix m = FindGlobalMatrix(); - - if (m_hidden || IsCulled()) return; - - m.Transpose(); - glLoadMatrixf( m.Ptr() ); - for (i = m_prerender.begin(); i != m_prerender.end(); ++i ) (*i)->PreRender(this); +} +void RenderableNode::Render(const MercuryMatrix& matrix) +{ + list< MercuryAsset* >::iterator i; for (i = m_render.begin(); i != m_render.end(); ++i ) (*i)->Render(this); - +} + +void RenderableNode::PostRender(const MercuryMatrix& matrix) +{ + list< MercuryAsset* >::iterator i; for (i = m_postrender.begin(); i != m_postrender.end(); ++i ) (*i)->PostRender(this); } @@ -106,21 +107,6 @@ return false; } -void RenderableNode::RecursiveRender( MercuryNode* n ) -{ - RenderableNode* rn; - if ( ( rn = Cast(n) ) ) - { - rn->Render(); - } - - const list< MercuryNode* >& children = n->Children(); - list< MercuryNode* >::const_iterator i; - - for (i = children.begin(); i != children.end(); ++i ) - RenderableNode::RecursiveRender( *i ); -} - void RenderableNode::LoadFromXML(const XMLNode& node) { if ( !node.Attribute("hidden").empty() ) Modified: Mercury2/src/RenderableNode.h =================================================================== --- Mercury2/src/RenderableNode.h 2009-04-04 19:54:12 UTC (rev 198) +++ Mercury2/src/RenderableNode.h 2009-04-04 23:23:21 UTC (rev 199) @@ -16,21 +16,24 @@ RenderableNode(); ~RenderableNode(); - virtual void Render(); virtual void Update(float dTime); - + inline void AddAsset(MAutoPtr< MercuryAsset > asset) { m_assets.push_back(asset); } void AddPreRender(MercuryAsset* asset); void AddRender(MercuryAsset* asset); void AddPostRender(MercuryAsset* asset); - static void RecursiveRender( MercuryNode* n ); + virtual void PreRender(const MercuryMatrix& matrix); + virtual void Render(const MercuryMatrix& matrix); + virtual void PostRender(const MercuryMatrix& matrix); + virtual void LoadFromXML(const XMLNode& node); const MercuryMatrix& FindGlobalMatrix() const; virtual bool IsCulled() { return false; } + bool IsHidden() { return m_hidden; } GENRTTI(RenderableNode); protected: Modified: Mercury2/src/Viewport.cpp =================================================================== --- Mercury2/src/Viewport.cpp 2009-04-04 19:54:12 UTC (rev 198) +++ Mercury2/src/Viewport.cpp 2009-04-04 23:23:21 UTC (rev 199) @@ -3,22 +3,15 @@ REGISTER_NODE_TYPE(Viewport); -const Frustum* FRUSTUM = NULL; - -void Viewport::Render() +void Viewport::Render(const MercuryMatrix& matrix) { - FRUSTUM = &m_frustum; - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); - - MercuryMatrix m = FindGlobalMatrix(); - m.Transpose(); MercuryMatrix f = m_frustum.GetMatrix(); f.Transpose(); - glLoadMatrixf( (m * f).Ptr() ); + glLoadMatrixf( (matrix * f).Ptr() ); //The following 2 are equivelent to above // glLoadMatrixf( m_frustum.Ptr() ); // glMultMatrixf( m.Ptr() ); Modified: Mercury2/src/Viewport.h =================================================================== --- Mercury2/src/Viewport.h 2009-04-04 19:54:12 UTC (rev 198) +++ Mercury2/src/Viewport.h 2009-04-04 23:23:21 UTC (rev 199) @@ -40,7 +40,7 @@ class Viewport : public RenderableNode { public: - virtual void Render(); + virtual void Render(const MercuryMatrix& matrix); virtual void LoadFromXML(const XMLNode& node); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |