|
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.
|