Commit 31e8ed04 authored by hybrid's avatar hybrid

Convert CAttributes Parameter member to dynamic memory allocation, as it is reference counted.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@4385 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 19659795
...@@ -187,7 +187,7 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs, ...@@ -187,7 +187,7 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs,
gui::IGUIEnvironment* gui) gui::IGUIEnvironment* gui)
: ISceneNode(0, 0), Driver(driver), FileSystem(fs), GUIEnvironment(gui), : ISceneNode(0, 0), Driver(driver), FileSystem(fs), GUIEnvironment(gui),
CursorControl(cursorControl), CollisionManager(0), CursorControl(cursorControl), CollisionManager(0),
ActiveCamera(0), ShadowColor(150,0,0,0), AmbientLight(0,0,0,0), ActiveCamera(0), ShadowColor(150,0,0,0), AmbientLight(0,0,0,0), Parameters(0),
MeshCache(cache), CurrentRendertime(ESNRP_NONE), LightManager(0), MeshCache(cache), CurrentRendertime(ESNRP_NONE), LightManager(0),
IRR_XML_FORMAT_SCENE(L"irr_scene"), IRR_XML_FORMAT_NODE(L"node"), IRR_XML_FORMAT_NODE_ATTR_TYPE(L"type") IRR_XML_FORMAT_SCENE(L"irr_scene"), IRR_XML_FORMAT_NODE(L"node"), IRR_XML_FORMAT_NODE_ATTR_TYPE(L"type")
{ {
...@@ -199,10 +199,6 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs, ...@@ -199,10 +199,6 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs,
// root node's scene manager // root node's scene manager
SceneManager = this; SceneManager = this;
// set scene parameters
Parameters.setAttribute( DEBUG_NORMAL_LENGTH, 1.f );
Parameters.setAttribute( DEBUG_NORMAL_COLOR, video::SColor(255, 34, 221, 221));
if (Driver) if (Driver)
Driver->grab(); Driver->grab();
...@@ -221,6 +217,11 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs, ...@@ -221,6 +217,11 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs,
else else
MeshCache->grab(); MeshCache->grab();
// set scene parameters
Parameters = new io::CAttributes();
Parameters->setAttribute(DEBUG_NORMAL_LENGTH, 1.f);
Parameters->setAttribute(DEBUG_NORMAL_COLOR, video::SColor(255, 34, 221, 221));
// create collision manager // create collision manager
CollisionManager = new CSceneCollisionManager(this, Driver); CollisionManager = new CSceneCollisionManager(this, Driver);
...@@ -249,7 +250,7 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs, ...@@ -249,7 +250,7 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs,
MeshLoaderList.push_back(new CCSMLoader(this, FileSystem)); MeshLoaderList.push_back(new CCSMLoader(this, FileSystem));
#endif #endif
#ifdef _IRR_COMPILE_WITH_LMTS_LOADER_ #ifdef _IRR_COMPILE_WITH_LMTS_LOADER_
MeshLoaderList.push_back(new CLMTSMeshFileLoader(FileSystem, Driver, &Parameters)); MeshLoaderList.push_back(new CLMTSMeshFileLoader(FileSystem, Driver, Parameters));
#endif #endif
#ifdef _IRR_COMPILE_WITH_MY3D_LOADER_ #ifdef _IRR_COMPILE_WITH_MY3D_LOADER_
MeshLoaderList.push_back(new CMY3DMeshFileLoader(this, FileSystem)); MeshLoaderList.push_back(new CMY3DMeshFileLoader(this, FileSystem));
...@@ -302,7 +303,6 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs, ...@@ -302,7 +303,6 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs,
SceneLoaderList.push_back(new CSceneLoaderIrr(this, FileSystem)); SceneLoaderList.push_back(new CSceneLoaderIrr(this, FileSystem));
#endif #endif
// factories // factories
ISceneNodeFactory* factory = new CDefaultSceneNodeFactory(this); ISceneNodeFactory* factory = new CDefaultSceneNodeFactory(this);
registerSceneNodeFactory(factory); registerSceneNodeFactory(factory);
...@@ -354,6 +354,9 @@ CSceneManager::~CSceneManager() ...@@ -354,6 +354,9 @@ CSceneManager::~CSceneManager()
if (MeshCache) if (MeshCache)
MeshCache->drop(); MeshCache->drop();
if (Parameters)
Parameters->drop();
for (i=0; i<SceneNodeFactoryList.size(); ++i) for (i=0; i<SceneNodeFactoryList.size(); ++i)
SceneNodeFactoryList[i]->drop(); SceneNodeFactoryList[i]->drop();
...@@ -1327,13 +1330,13 @@ u32 CSceneManager::registerNodeForRendering(ISceneNode* node, E_SCENE_NODE_RENDE ...@@ -1327,13 +1330,13 @@ u32 CSceneManager::registerNodeForRendering(ISceneNode* node, E_SCENE_NODE_RENDE
} }
#ifdef SCENEMANAGER_DEBUG #ifdef SCENEMANAGER_DEBUG
s32 index = Parameters.findAttribute ( "calls" ); s32 index = Parameters->findAttribute("calls");
Parameters.setAttribute ( index, Parameters.getAttributeAsInt ( index ) + 1 ); Parameters->setAttribute(index, Parameters->getAttributeAsInt(index)+1);
if (!taken) if (!taken)
{ {
index = Parameters.findAttribute ( "culled" ); index = Parameters->findAttribute("culled");
Parameters.setAttribute ( index, Parameters.getAttributeAsInt ( index ) + 1 ); Parameters->setAttribute(index, Parameters->getAttributeAsInt(index)+1);
} }
#endif #endif
...@@ -1349,11 +1352,11 @@ void CSceneManager::drawAll() ...@@ -1349,11 +1352,11 @@ void CSceneManager::drawAll()
return; return;
// reset attributes // reset attributes
Parameters.setAttribute ( "culled", 0 ); Parameters->setAttribute("culled", 0);
Parameters.setAttribute ( "calls", 0 ); Parameters->setAttribute("calls", 0);
Parameters.setAttribute ( "drawn_solid", 0 ); Parameters->setAttribute("drawn_solid", 0);
Parameters.setAttribute ( "drawn_transparent", 0 ); Parameters->setAttribute("drawn_transparent", 0);
Parameters.setAttribute ( "drawn_transparent_effect", 0 ); Parameters->setAttribute("drawn_transparent_effect", 0);
u32 i; // new ISO for scoping problem in some compilers u32 i; // new ISO for scoping problem in some compilers
...@@ -1364,7 +1367,7 @@ void CSceneManager::drawAll() ...@@ -1364,7 +1367,7 @@ void CSceneManager::drawAll()
Driver->setTransform ( video::ETS_WORLD, core::IdentityMatrix ); Driver->setTransform ( video::ETS_WORLD, core::IdentityMatrix );
for (i=video::ETS_COUNT-1; i>=video::ETS_TEXTURE_0; --i) for (i=video::ETS_COUNT-1; i>=video::ETS_TEXTURE_0; --i)
Driver->setTransform ( (video::E_TRANSFORMATION_STATE)i, core::IdentityMatrix ); Driver->setTransform ( (video::E_TRANSFORMATION_STATE)i, core::IdentityMatrix );
Driver->setAllowZWriteOnTransparent(Parameters.getAttributeAsBool( ALLOW_ZWRITE_ON_TRANSPARENT) ); Driver->setAllowZWriteOnTransparent(Parameters->getAttributeAsBool(ALLOW_ZWRITE_ON_TRANSPARENT));
// do animations and other stuff. // do animations and other stuff.
OnAnimate(os::Timer::getTime()); OnAnimate(os::Timer::getTime());
...@@ -1500,7 +1503,7 @@ void CSceneManager::drawAll() ...@@ -1500,7 +1503,7 @@ void CSceneManager::drawAll()
SolidNodeList[i].Node->render(); SolidNodeList[i].Node->render();
} }
Parameters.setAttribute("drawn_solid", (s32) SolidNodeList.size() ); Parameters->setAttribute("drawn_solid", (s32) SolidNodeList.size());
SolidNodeList.set_used(0); SolidNodeList.set_used(0);
if (LightManager) if (LightManager)
...@@ -1563,7 +1566,7 @@ void CSceneManager::drawAll() ...@@ -1563,7 +1566,7 @@ void CSceneManager::drawAll()
TransparentNodeList[i].Node->render(); TransparentNodeList[i].Node->render();
} }
Parameters.setAttribute ( "drawn_transparent", (s32) TransparentNodeList.size() ); Parameters->setAttribute("drawn_transparent", (s32) TransparentNodeList.size());
TransparentNodeList.set_used(0); TransparentNodeList.set_used(0);
if (LightManager) if (LightManager)
...@@ -1595,7 +1598,7 @@ void CSceneManager::drawAll() ...@@ -1595,7 +1598,7 @@ void CSceneManager::drawAll()
TransparentEffectNodeList[i].Node->render(); TransparentEffectNodeList[i].Node->render();
} }
Parameters.setAttribute ( "drawn_transparent_effect", (s32) TransparentEffectNodeList.size() ); Parameters->setAttribute("drawn_transparent_effect", (s32) TransparentEffectNodeList.size());
TransparentEffectNodeList.set_used(0); TransparentEffectNodeList.set_used(0);
} }
...@@ -1610,8 +1613,8 @@ void CSceneManager::drawAll() ...@@ -1610,8 +1613,8 @@ void CSceneManager::drawAll()
void CSceneManager::setLightManager(ILightManager* lightManager) void CSceneManager::setLightManager(ILightManager* lightManager)
{ {
if (lightManager) if (lightManager)
lightManager->grab(); lightManager->grab();
if (LightManager) if (LightManager)
LightManager->drop(); LightManager->drop();
...@@ -2000,7 +2003,7 @@ void CSceneManager::clear() ...@@ -2000,7 +2003,7 @@ void CSceneManager::clear()
//! Returns interface to the parameters set in this scene. //! Returns interface to the parameters set in this scene.
io::IAttributes* CSceneManager::getParameters() io::IAttributes* CSceneManager::getParameters()
{ {
return &Parameters; return Parameters;
} }
......
...@@ -631,7 +631,7 @@ namespace scene ...@@ -631,7 +631,7 @@ namespace scene
video::SColorf AmbientLight; video::SColorf AmbientLight;
//! String parameters //! String parameters
io::CAttributes Parameters; io::CAttributes* Parameters;
//! Mesh cache //! Mesh cache
IMeshCache* MeshCache; IMeshCache* MeshCache;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment