Split Actor::BeginDraw() into Actor::PreDraw() which does tweening calculations and Actor::BeginDraw() now only sets up the matrix. Skip setting up the matrix if the Actor is fully transparent.

This commit is contained in:
Ben "root" Anderson
2013-12-13 12:10:11 -06:00
parent 8285d5b1aa
commit ddbdb77368
2 changed files with 16 additions and 8 deletions
+14 -8
View File
@@ -281,12 +281,15 @@ void Actor::LoadFromNode( const XNode* pNode )
void Actor::Draw()
{
if( !m_bVisible )
if( !m_bVisible ||
m_fHibernateSecondsLeft > 0 ||
this->EarlyAbortDraw() )
return; // early abort
this->PreDraw();
ASSERT( m_pTempState != NULL );
if( m_pTempState->diffuse[0].a == 0 && m_pTempState->diffuse[1].a == 0 && m_pTempState->diffuse[2].a == 0 && m_pTempState->diffuse[3].a == 0 ) // This Actor is fully transparent
return; // early abort
if( m_fHibernateSecondsLeft > 0 )
return; // early abort
if( this->EarlyAbortDraw() )
return;
// call the most-derived versions
this->BeginDraw();
@@ -294,10 +297,8 @@ void Actor::Draw()
this->EndDraw();
}
void Actor::BeginDraw() // set the world matrix and calculate actor properties
void Actor::PreDraw() // calculate actor properties
{
DISPLAY->PushMatrix(); // we're actually going to do some drawing in this function
// Somthing below may set m_pTempState to tempState
m_pTempState = &m_current;
@@ -480,6 +481,11 @@ void Actor::BeginDraw() // set the world matrix and calculate actor properties
tempState.glow = tempState.glow + m_internalGlow - m_internalGlow * tempState.glow;
m_internalGlow.a = 0;
}
}
void Actor::BeginDraw() // set the world matrix
{
DISPLAY->PushMatrix();
if( m_pTempState->pos.x != 0 || m_pTempState->pos.y != 0 || m_pTempState->pos.z != 0 )
{