|
From: <cn...@us...> - 2009-08-12 03:42:12
|
Revision: 476
http://hgengine.svn.sourceforge.net/hgengine/?rev=476&view=rev
Author: cnlohr
Date: 2009-08-12 03:42:02 +0000 (Wed, 12 Aug 2009)
Log Message:
-----------
updated messing around - it works, but not right
Modified Paths:
--------------
Mercury2/src/Viewport.cpp
Modified: Mercury2/src/Viewport.cpp
===================================================================
--- Mercury2/src/Viewport.cpp 2009-08-11 03:29:52 UTC (rev 475)
+++ Mercury2/src/Viewport.cpp 2009-08-12 03:42:02 UTC (rev 476)
@@ -40,6 +40,23 @@
n = this;
while( n )
{
+ //If we're hidden, skip to the next traversable element
+ if( n->IsHidden() )
+ {
+ //Make sure we have a next sibling...
+ while( n && n != this && !n->NextSibling() )
+ {
+ depth--;
+ n = n->Parent();
+ }
+
+ if( !n || n == this )
+ break;
+
+ n = n->NextSibling();
+ }
+
+
const MercuryMatrix& matrix = n->FindGlobalMatrix();
TransformNode * tn = dynamic_cast< TransformNode * >( n );
@@ -47,12 +64,60 @@
tn->HandleMatrixOperations();
n->PreRender( matrix );
+
+ if( n->Parent() )
+ n->Parent()->m_culled = n->Parent()->m_culled && n->IsCulled();
+
+ //Traverse next
+/*
+ MercuryNode * ret;
+ if( ret = n->FirstChild() )
+ {
+ depth++;
+ n = ret;
+ }
+ else if( ret = n->NextSibling() )
+ n = ret;
+ else if( ret = n->Parent() )
+ {
+ depth--;
+
+ while( ret && ret != this && !ret->NextSibling() )
+ {
+ depth--;
+ ret = ret->Parent();
+ }
+
+ if( !ret || ret == this )
+ return 0;
+
+ n = ret->m_nextSibling;
+ }
+ else
+ return 0;
+*/
+
n = n->TraversalNextNode( this, depth );
}
n = this;
while( n )
{
+ if( n->IsHidden() || m_occlusionResult.IsOccluded() || IsCulled() )
+ {
+ //Make sure we have a next sibling...
+ while( n && n != this && !n->NextSibling() )
+ {
+ depth--;
+ n = n->Parent();
+ }
+
+ if( !n || n == this )
+ break;
+
+ n = n->NextSibling();
+ }
+
const MercuryMatrix& matrix = n->FindGlobalMatrix();
const MercuryMatrix& modelView = n->FindModelViewMatrix(); //get the one computed in the last transform
@@ -62,18 +127,23 @@
sa.type = ShaderAttribute::TYPE_MATRIX;
sa.value.matrix = matrix.Ptr();
Shader::SetAttribute("HG_ModelMatrix", sa);
-
- n->Render( modelView );
+ if ( n->m_useAlphaPath )
+ CURRENTRENDERGRAPH->AddAlphaNode(n);
+ else
+ n->Render( modelView );
+
glLoadMatrix( modelView );
Shader::SetAttribute("HG_ModelMatrix", sa);
- n->PostRender( modelView );
+ if ( !n->m_useAlphaPath )
+ n->PostRender( modelView );
n = n->TraversalNextNode( this, depth );
}
-
+ this->PostRender( FindModelViewMatrix() );
+
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|