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-e03cc46cb475master
parent
1965979541
commit
31e8ed045a
|
@ -187,7 +187,7 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs,
|
|||
gui::IGUIEnvironment* gui)
|
||||
: ISceneNode(0, 0), Driver(driver), FileSystem(fs), GUIEnvironment(gui),
|
||||
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),
|
||||
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,
|
|||
// root node's scene manager
|
||||
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)
|
||||
Driver->grab();
|
||||
|
||||
|
@ -221,6 +217,11 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs,
|
|||
else
|
||||
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
|
||||
CollisionManager = new CSceneCollisionManager(this, Driver);
|
||||
|
||||
|
@ -249,7 +250,7 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs,
|
|||
MeshLoaderList.push_back(new CCSMLoader(this, FileSystem));
|
||||
#endif
|
||||
#ifdef _IRR_COMPILE_WITH_LMTS_LOADER_
|
||||
MeshLoaderList.push_back(new CLMTSMeshFileLoader(FileSystem, Driver, &Parameters));
|
||||
MeshLoaderList.push_back(new CLMTSMeshFileLoader(FileSystem, Driver, Parameters));
|
||||
#endif
|
||||
#ifdef _IRR_COMPILE_WITH_MY3D_LOADER_
|
||||
MeshLoaderList.push_back(new CMY3DMeshFileLoader(this, FileSystem));
|
||||
|
@ -302,7 +303,6 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs,
|
|||
SceneLoaderList.push_back(new CSceneLoaderIrr(this, FileSystem));
|
||||
#endif
|
||||
|
||||
|
||||
// factories
|
||||
ISceneNodeFactory* factory = new CDefaultSceneNodeFactory(this);
|
||||
registerSceneNodeFactory(factory);
|
||||
|
@ -354,6 +354,9 @@ CSceneManager::~CSceneManager()
|
|||
if (MeshCache)
|
||||
MeshCache->drop();
|
||||
|
||||
if (Parameters)
|
||||
Parameters->drop();
|
||||
|
||||
for (i=0; i<SceneNodeFactoryList.size(); ++i)
|
||||
SceneNodeFactoryList[i]->drop();
|
||||
|
||||
|
@ -1327,13 +1330,13 @@ u32 CSceneManager::registerNodeForRendering(ISceneNode* node, E_SCENE_NODE_RENDE
|
|||
}
|
||||
|
||||
#ifdef SCENEMANAGER_DEBUG
|
||||
s32 index = Parameters.findAttribute ( "calls" );
|
||||
Parameters.setAttribute ( index, Parameters.getAttributeAsInt ( index ) + 1 );
|
||||
s32 index = Parameters->findAttribute("calls");
|
||||
Parameters->setAttribute(index, Parameters->getAttributeAsInt(index)+1);
|
||||
|
||||
if (!taken)
|
||||
{
|
||||
index = Parameters.findAttribute ( "culled" );
|
||||
Parameters.setAttribute ( index, Parameters.getAttributeAsInt ( index ) + 1 );
|
||||
index = Parameters->findAttribute("culled");
|
||||
Parameters->setAttribute(index, Parameters->getAttributeAsInt(index)+1);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1349,11 +1352,11 @@ void CSceneManager::drawAll()
|
|||
return;
|
||||
|
||||
// reset attributes
|
||||
Parameters.setAttribute ( "culled", 0 );
|
||||
Parameters.setAttribute ( "calls", 0 );
|
||||
Parameters.setAttribute ( "drawn_solid", 0 );
|
||||
Parameters.setAttribute ( "drawn_transparent", 0 );
|
||||
Parameters.setAttribute ( "drawn_transparent_effect", 0 );
|
||||
Parameters->setAttribute("culled", 0);
|
||||
Parameters->setAttribute("calls", 0);
|
||||
Parameters->setAttribute("drawn_solid", 0);
|
||||
Parameters->setAttribute("drawn_transparent", 0);
|
||||
Parameters->setAttribute("drawn_transparent_effect", 0);
|
||||
|
||||
u32 i; // new ISO for scoping problem in some compilers
|
||||
|
||||
|
@ -1364,7 +1367,7 @@ void CSceneManager::drawAll()
|
|||
Driver->setTransform ( video::ETS_WORLD, core::IdentityMatrix );
|
||||
for (i=video::ETS_COUNT-1; i>=video::ETS_TEXTURE_0; --i)
|
||||
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.
|
||||
OnAnimate(os::Timer::getTime());
|
||||
|
@ -1500,7 +1503,7 @@ void CSceneManager::drawAll()
|
|||
SolidNodeList[i].Node->render();
|
||||
}
|
||||
|
||||
Parameters.setAttribute("drawn_solid", (s32) SolidNodeList.size() );
|
||||
Parameters->setAttribute("drawn_solid", (s32) SolidNodeList.size());
|
||||
SolidNodeList.set_used(0);
|
||||
|
||||
if (LightManager)
|
||||
|
@ -1563,7 +1566,7 @@ void CSceneManager::drawAll()
|
|||
TransparentNodeList[i].Node->render();
|
||||
}
|
||||
|
||||
Parameters.setAttribute ( "drawn_transparent", (s32) TransparentNodeList.size() );
|
||||
Parameters->setAttribute("drawn_transparent", (s32) TransparentNodeList.size());
|
||||
TransparentNodeList.set_used(0);
|
||||
|
||||
if (LightManager)
|
||||
|
@ -1595,7 +1598,7 @@ void CSceneManager::drawAll()
|
|||
TransparentEffectNodeList[i].Node->render();
|
||||
}
|
||||
|
||||
Parameters.setAttribute ( "drawn_transparent_effect", (s32) TransparentEffectNodeList.size() );
|
||||
Parameters->setAttribute("drawn_transparent_effect", (s32) TransparentEffectNodeList.size());
|
||||
TransparentEffectNodeList.set_used(0);
|
||||
}
|
||||
|
||||
|
@ -1610,8 +1613,8 @@ void CSceneManager::drawAll()
|
|||
|
||||
void CSceneManager::setLightManager(ILightManager* lightManager)
|
||||
{
|
||||
if (lightManager)
|
||||
lightManager->grab();
|
||||
if (lightManager)
|
||||
lightManager->grab();
|
||||
if (LightManager)
|
||||
LightManager->drop();
|
||||
|
||||
|
@ -2000,7 +2003,7 @@ void CSceneManager::clear()
|
|||
//! Returns interface to the parameters set in this scene.
|
||||
io::IAttributes* CSceneManager::getParameters()
|
||||
{
|
||||
return &Parameters;
|
||||
return Parameters;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -631,7 +631,7 @@ namespace scene
|
|||
video::SColorf AmbientLight;
|
||||
|
||||
//! String parameters
|
||||
io::CAttributes Parameters;
|
||||
io::CAttributes* Parameters;
|
||||
|
||||
//! Mesh cache
|
||||
IMeshCache* MeshCache;
|
||||
|
|
Loading…
Reference in New Issue