From: <cn...@us...> - 2009-08-18 22:39:04
|
Revision: 496 http://hgengine.svn.sourceforge.net/hgengine/?rev=496&view=rev Author: cnlohr Date: 2009-08-18 22:38:55 +0000 (Tue, 18 Aug 2009) Log Message: ----------- switch to MHash - It's roughly 4% faster total scene graph traversal with MHash instead of map when the CPU is forced to be the bottleneck. Modified Paths: -------------- Mercury2/src/MercuryAsset.cpp Mercury2/src/MercuryAsset.h Mercury2/src/Shader.cpp Mercury2/src/Shader.h Modified: Mercury2/src/MercuryAsset.cpp =================================================================== --- Mercury2/src/MercuryAsset.cpp 2009-08-18 22:27:31 UTC (rev 495) +++ Mercury2/src/MercuryAsset.cpp 2009-08-18 22:38:55 UTC (rev 496) @@ -120,13 +120,6 @@ return NULL; } -MercuryAsset* AssetFactory::LocateAsset( const MString& key ) -{ - std::map<MString, MercuryAsset*>::iterator asset = m_assetInstances.find(key); - if ( asset != m_assetInstances.end() ) return asset->second; - return NULL; -} - void AssetFactory::AddAssetInstance(const MString& key, MercuryAsset* asset) { asset->IsInstanced(true); @@ -135,16 +128,10 @@ void AssetFactory::RemoveAssetInstance(const MString& key) { - std::map<MString, MercuryAsset*>::iterator asset = m_assetInstances.find(key); - if ( asset != m_assetInstances.end() ) - { - m_assetInstances.erase( asset ); - printf("removed asset %s\n", key.c_str()); - } - + m_assetInstances.remove( key ); } -std::map<MString, MercuryAsset*> AssetFactory::m_assetInstances; +MHash< MercuryAsset*> AssetFactory::m_assetInstances; /*************************************************************************** * Copyright (C) 2008 by Joshua Allen * Modified: Mercury2/src/MercuryAsset.h =================================================================== --- Mercury2/src/MercuryAsset.h 2009-08-18 22:27:31 UTC (rev 495) +++ Mercury2/src/MercuryAsset.h 2009-08-18 22:38:55 UTC (rev 496) @@ -9,7 +9,7 @@ #include <XMLParser.h> #include <Callback.h> -#include <map> +#include <MercuryHash.h> #include <list> enum LoadState @@ -113,12 +113,12 @@ void RemoveAssetInstance(const MString& key); private: - MercuryAsset* LocateAsset( const MString& key ); + MercuryAsset* LocateAsset( const MString& key ) { MercuryAsset ** a = m_assetInstances.get( key ); return a?(*a):0; } std::list< std::pair< MString, Callback0R< MAutoPtr<MercuryAsset> > > > m_factoryCallbacks; //the actual storage point is in MercuryAssetInstance - static std::map<MString, MercuryAsset*> m_assetInstances; + static MHash< MercuryAsset*> m_assetInstances; }; Modified: Mercury2/src/Shader.cpp =================================================================== --- Mercury2/src/Shader.cpp 2009-08-18 22:27:31 UTC (rev 495) +++ Mercury2/src/Shader.cpp 2009-08-18 22:38:55 UTC (rev 496) @@ -425,11 +425,9 @@ std::list< UniformMap >::iterator ui = m_uniforms.begin(); for (;ui != m_uniforms.end(); ++ui) { - std::map< MString, ShaderAttribute >::iterator sai = m_globalAttributes.find( ui->name ); - if (sai != m_globalAttributes.end()) - { - SetAttributeInternal(sai->first, sai->second); - } + ShaderAttribute* a = m_globalAttributes.get( ui->name ); + if( a ) + SetAttributeInternal(ui->name,*a); } } @@ -459,8 +457,7 @@ void Shader::RemoveAttribute(const MString& name) { - std::map< MString, ShaderAttribute>::iterator i = m_globalAttributes.find( name ); - if ( i != m_globalAttributes.end() ) m_globalAttributes.erase( i ); + m_globalAttributes.remove( name ); //no sense in unsetting it in the current shader, what would we set it to? } @@ -491,7 +488,7 @@ } } -std::map< MString, ShaderAttribute> Shader::m_globalAttributes; +MHash< ShaderAttribute> Shader::m_globalAttributes; /* * Copyright (c) 2009 Charles Lohr Modified: Mercury2/src/Shader.h =================================================================== --- Mercury2/src/Shader.h 2009-08-18 22:27:31 UTC (rev 495) +++ Mercury2/src/Shader.h 2009-08-18 22:38:55 UTC (rev 496) @@ -2,7 +2,7 @@ #define SHADER_H #include <MercuryAsset.h> -#include <map> +#include <MercuryHash.h> #include <vector> #include <MercuryMatrix.h> @@ -49,7 +49,7 @@ no longer referenced, it will remain in the map, as to prevent bad pointers. This list is all-enduring. */ - std::map< MString, ShaderAttribute * > m_AllShaderAttributes; + MHash< ShaderAttribute * > m_AllShaderAttributes; }; class UniformMap @@ -176,7 +176,7 @@ Shader * OriginalShader; //global uniform that should be applied to all shaders - static std::map< MString, ShaderAttribute > m_globalAttributes; + static MHash< ShaderAttribute > m_globalAttributes; }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |