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