[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