BGE: Cleaning up BL_ArmatureObject so it has direct control over its armature and pose. It now also copies armatures to avoid needing to swap poses around. This makes updating pose data more thread safe.
BGE: Using OpenMP to thread the pose updates. Helgrind still reports some errors that need to be fixed.
BGE: Removing unused code from BL_ArmatureObject and renaming BL_ArmatureObject::SetActiveAction() to UpdateTimestep().
BGE: Allowing the BL_SkinDeformer to be updated in a loop in KX_Scene::UpdateAnimations(). OpenMP is then used to thread that loop.
BGE: Moving mesh copy code from BL_SkinDeformer::Apply() to BL_SkinDeformer::UpdateInternal() so the code can be run in parallel.
BGE Cleanup: Replacing a switch in BL_SkinDeformer::UpdateInternal() with a simple if/else.
BGE: Have the BL_Action keep a copy of the action it needs to use to avoid threading problems.
BGE: Combining the two threaded loops now that helgrind no longer reports errors for either of them. This gives a slight performance boost.
Implementing an optimization to arrays of RNA values in the animation system,
which reduces the number of RNA lookups needed. For example, position has three
values (x, y, and z) that would previously do three RNA lookups, this can now
be done with one. In my benchmark, this cut RNA write times in half, resulting
in a 10~15% improvement to the overall frame time.