From 6c2eba12ec04280f893f5031c920644be8fe9bcc Mon Sep 17 00:00:00 2001 From: "rem..om" Date: Sun, 24 Apr 2011 08:45:35 +0000 Subject: [PATCH] Fixed double TempVars locking in skeleton and bone when computing skinning matrices, thanks to cyuczieekc git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7301 75d07b2b-3a1a-0410-a2c5-0572b91ccdca --- engine/src/core/com/jme3/animation/Bone.java | 16 +++++----------- engine/src/core/com/jme3/animation/Skeleton.java | 2 +- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/engine/src/core/com/jme3/animation/Bone.java b/engine/src/core/com/jme3/animation/Bone.java index b46e1276a..62ea58e80 100644 --- a/engine/src/core/com/jme3/animation/Bone.java +++ b/engine/src/core/com/jme3/animation/Bone.java @@ -93,7 +93,6 @@ public final class Bone implements Savable { private Quaternion worldRot = new Quaternion(); private Vector3f worldScale = new Vector3f(); - /** * Creates a new bone with the given name. * @@ -104,7 +103,7 @@ public final class Bone implements Savable { initialPos = new Vector3f(); initialRot = new Quaternion(); - initialScale = new Vector3f(1,1,1); + initialScale = new Vector3f(1, 1, 1); worldBindInversePos = new Vector3f(); worldBindInverseRot = new Quaternion(); @@ -323,7 +322,7 @@ public final class Bone implements Savable { * The skinning transform applies the animation of the bone to a vertex. * @param m */ - void getOffsetTransform(Matrix4f m, Quaternion tmp1, Vector3f tmp2, Vector3f tmp3) { + void getOffsetTransform(Matrix4f m, Quaternion tmp1, Vector3f tmp2, Vector3f tmp3, Matrix3f rotMat) { //Computing scale Vector3f scale = worldScale.mult(worldBindInverseScale, tmp3); @@ -334,15 +333,11 @@ public final class Bone implements Savable { //computing translation //translation depend on rotation and scale Vector3f translate = worldPos.add(rotate.mult(scale.mult(worldBindInversePos, tmp2), tmp2), tmp2); - + //populating the matrix m.loadIdentity(); - TempVars vars = TempVars.get(); - assert vars.lock(); - Matrix3f rotMat = vars.tempMat3; m.setTransform(translate, scale, rotate.toRotationMatrix(rotMat)); - assert vars.unlock(); } /** @@ -377,7 +372,6 @@ public final class Bone implements Savable { worldPos.set(translation); worldRot.set(rotation); } - protected Vector3f tmpVec = new Vector3f(); protected Quaternion tmpQuat = new Quaternion(); @@ -388,7 +382,7 @@ public final class Bone implements Savable { public Vector3f getTmpVec() { return tmpVec; } - + /** * Returns the attachment node. * Attach models and effects to this node to make @@ -425,7 +419,7 @@ public final class Bone implements Savable { localPos.set(initialPos).addLocal(translation); localRot.set(initialRot).multLocal(rotation); - + if (scale != null) { localScale.set(initialScale).multLocal(scale); } diff --git a/engine/src/core/com/jme3/animation/Skeleton.java b/engine/src/core/com/jme3/animation/Skeleton.java index add2f18be..588b33dc1 100644 --- a/engine/src/core/com/jme3/animation/Skeleton.java +++ b/engine/src/core/com/jme3/animation/Skeleton.java @@ -213,7 +213,7 @@ public final class Skeleton implements Savable { TempVars vars = TempVars.get(); assert vars.lock(); for (int i = 0; i < boneList.length; i++) { - boneList[i].getOffsetTransform(skinningMatrixes[i], vars.quat1, vars.vect1, vars.vect2); + boneList[i].getOffsetTransform(skinningMatrixes[i], vars.quat1, vars.vect1, vars.vect2, vars.tempMat3); } assert vars.unlock(); return skinningMatrixes;