|
From: <axl...@us...> - 2010-05-23 12:37:27
|
Revision: 746
http://hgengine.svn.sourceforge.net/hgengine/?rev=746&view=rev
Author: axlecrusher
Date: 2010-05-23 12:37:21 +0000 (Sun, 23 May 2010)
Log Message:
-----------
try to minimize state changes
Modified Paths:
--------------
Mercury2/src/StateChanger.cpp
Modified: Mercury2/src/StateChanger.cpp
===================================================================
--- Mercury2/src/StateChanger.cpp 2010-05-22 19:13:36 UTC (rev 745)
+++ Mercury2/src/StateChanger.cpp 2010-05-23 12:37:21 UTC (rev 746)
@@ -106,18 +106,37 @@
{
if( bEnable )
{
- GLCALL( glEnable( GL_DEPTH_TEST ) );
+ if (m_lastState != ON)
+ {
+ GLCALL( glEnable( GL_DEPTH_TEST ) );
+ m_lastState = ON;
+ }
}
else
{
- GLCALL( glDisable( GL_DEPTH_TEST ) );
+ if (m_lastState != OFF)
+ {
+ GLCALL( glDisable( GL_DEPTH_TEST ) );
+ m_lastState = OFF;
+ }
}
}
STATECHANGE_RTTI( DepthTest );
- bool bEnable;
+
+ private:
+ bool bEnable;
+ enum LastDepthState
+ {
+ UNKNOWN,
+ ON,
+ OFF
+ };
+ static LastDepthState m_lastState;
};
+DepthTest::LastDepthState DepthTest::m_lastState = UNKNOWN;
+
REGISTER_STATECHANGE( DepthTest );
class DepthWrite : public StateChange
@@ -262,13 +281,24 @@
void Activate()
{
- GLCALL( glBlendFunc(m_src,m_dest) );
+ if ((m_src != m_lastSrc)||(m_dest!=m_lastDest))
+ {
+ GLCALL( glBlendFunc(m_src,m_dest) );
+ m_lastSrc = m_src;
+ m_lastDest = m_dest;
+ }
}
STATECHANGE_RTTI( BlendFunc );
- int m_src, m_dest;
+
+ private:
+ int m_src, m_dest;
+ static long m_lastSrc, m_lastDest;
};
+long BlendFunc::m_lastSrc = 0;
+long BlendFunc::m_lastDest = 0;
+
REGISTER_STATECHANGE( BlendFunc );
///Change the alpha blending function (can be useful for non-shader farcry-like foliage)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|