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.

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to