[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39896] trunk/blender/source/gameengine/ Ketsji: BGE animations: Adding a separate list to KX_Scene for animated objects.
Mitchell Stokes
mogurijin at gmail.com
Sat Sep 3 22:48:47 CEST 2011
Revision: 39896
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39896
Author: moguri
Date: 2011-09-03 20:48:47 +0000 (Sat, 03 Sep 2011)
Log Message:
-----------
BGE animations: Adding a separate list to KX_Scene for animated objects. This makes scenes with a lot of non-animated objects faster. In my test scene with 8000 static, non-animated cubes my time spent on animations went from 1.5~1.7ms to 0.001ms.
Modified Paths:
--------------
trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp
trunk/blender/source/gameengine/Ketsji/KX_Scene.h
Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp 2011-09-03 20:48:43 UTC (rev 39895)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp 2011-09-03 20:48:47 UTC (rev 39896)
@@ -159,6 +159,7 @@
}
if (m_actionManager)
{
+ KX_GetActiveScene()->RemoveAnimatedObject(this);
delete m_actionManager;
}
#ifdef WITH_PYTHON
@@ -355,8 +356,8 @@
{
// We only want to create an action manager if we need it
if (!m_actionManager)
- m_actionManager = new BL_ActionManager(this);
-
+ { KX_GetActiveScene()->AddAnimatedObject(this); m_actionManager = new BL_ActionManager(this);
+ }
return m_actionManager;
}
Modified: trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp 2011-09-03 20:48:43 UTC (rev 39895)
+++ trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp 2011-09-03 20:48:47 UTC (rev 39896)
@@ -168,6 +168,7 @@
m_lightlist= new CListValue();
m_inactivelist = new CListValue();
m_euthanasyobjects = new CListValue();
+ m_animatedlist = new CListValue();
m_logicmgr = new SCA_LogicManager();
@@ -253,6 +254,9 @@
if (m_euthanasyobjects)
m_euthanasyobjects->Release();
+ if (m_animatedlist)
+ m_animatedlist->Release();
+
if (m_logicmgr)
delete m_logicmgr;
@@ -1502,10 +1506,20 @@
m_logicmgr->BeginFrame(curtime, 1.0/KX_KetsjiEngine::GetTicRate());
}
+void KX_Scene::AddAnimatedObject(CValue* gameobj)
+{
+ m_animatedlist->Add(gameobj);
+}
+
+void KX_Scene::RemoveAnimatedObject(CValue* gameobj)
+{
+ m_animatedlist->RemoveValue(gameobj);
+}
+
void KX_Scene::UpdateAnimations(double curtime)
{
// Update any animations
- for (int i=0; i<GetObjectList()->GetCount(); ++i)
+ for (int i=0; i<m_animatedlist->GetCount(); ++i)
((KX_GameObject*)GetObjectList()->GetValue(i))->UpdateActionManager(curtime);
}
Modified: trunk/blender/source/gameengine/Ketsji/KX_Scene.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_Scene.h 2011-09-03 20:48:43 UTC (rev 39895)
+++ trunk/blender/source/gameengine/Ketsji/KX_Scene.h 2011-09-03 20:48:47 UTC (rev 39896)
@@ -130,6 +130,7 @@
CListValue* m_parentlist; // all 'root' parents
CListValue* m_lightlist;
CListValue* m_inactivelist; // all objects that are not in the active layer
+ CListValue* m_animatedlist; // all animated objects
SG_QList m_sghead; // list of nodes that needs scenegraph update
// the Dlist is not object that must be updated
@@ -334,6 +335,10 @@
int NewRemoveObject(CValue* gameobj);
void ReplaceMesh(CValue* gameobj,
void* meshob, bool use_gfx, bool use_phys);
+
+ void AddAnimatedObject(CValue* gameobj);
+ void RemoveAnimatedObject(CValue* gameobj);
+
/**
* @section Logic stuff
* Initiate an update of the logic system.
More information about the Bf-blender-cvs
mailing list