diff options
author | Porteries Tristan <republicthunderbolt9@gmail.com> | 2015-10-19 17:03:40 +0300 |
---|---|---|
committer | Porteries Tristan <republicthunderbolt9@gmail.com> | 2015-10-19 17:03:40 +0300 |
commit | 728d1ec504647f512aeb46d3eb7b15d262d94246 (patch) | |
tree | e368cf412f924f1f50193cda33e190cec9bf12eb /source/gameengine/Ketsji/KX_GameObject.cpp | |
parent | 2b12cf40a1912b44f76eb382d7999b66b66a6c6c (diff) |
BGE: Fix T46381 : last action frame not updated.
It fix T46381. Normally BL_Action::Update (manage action time, end, loop…) should be called the same number of times as BL_Action::UpdateIPO (update action position, scale ect… in the game object).
But the bug report shows that UpdateIPO is called one less time than Update. To fix it i revert the commit 362b25b38287cb75e4d22b30bdbc7f47e8eb3fdf and implement a mutex in BL_Action::Update.
Example file : {F245823}
Reviewers: lordloki, kupoman, campbellbarton, youle, moguri, sybren
Reviewed By: youle, moguri, sybren
Maniphest Tasks: T39928, T46381
Differential Revision: https://developer.blender.org/D1562
Diffstat (limited to 'source/gameengine/Ketsji/KX_GameObject.cpp')
-rw-r--r-- | source/gameengine/Ketsji/KX_GameObject.cpp | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/source/gameengine/Ketsji/KX_GameObject.cpp b/source/gameengine/Ketsji/KX_GameObject.cpp index d7a94f0601c..1dbcf14af89 100644 --- a/source/gameengine/Ketsji/KX_GameObject.cpp +++ b/source/gameengine/Ketsji/KX_GameObject.cpp @@ -481,11 +481,6 @@ void KX_GameObject::UpdateActionManager(float curtime) GetActionManager()->Update(curtime); } -void KX_GameObject::UpdateActionIPOs() -{ - GetActionManager()->UpdateIPOs(); -} - float KX_GameObject::GetActionFrame(short layer) { return GetActionManager()->GetActionFrame(layer); @@ -949,6 +944,9 @@ void KX_GameObject::InitIPO(bool ipo_as_force, void KX_GameObject::UpdateIPO(float curframetime, bool recurse) { + /* This function shouldn't call BL_Action::Update, not even indirectly, + * as it will cause deadlock due to the lock in BL_Action::Update. */ + // just the 'normal' update procedure. GetSGNode()->SetSimulatedTime(curframetime,recurse); GetSGNode()->UpdateWorldData(curframetime); |