1) Bug fix 1776
authorTon Roosendaal <ton@blender.org>
Thu, 11 Nov 2004 15:31:44 +0000 (15:31 +0000)
committerTon Roosendaal <ton@blender.org>
Thu, 11 Nov 2004 15:31:44 +0000 (15:31 +0000)
Lattices seem to have deform lag, when they're animated with Ipos.
Found out this behaviour is already from before 2.25... solved with
removing a where_is_object() from deform code, but dont fully grasp
why.
Tested with good demo file, with motion blur too.

2) No functional changes, just made 2 files compile without warnings;

- added extra ifdefs __NLA_BLENDCON for unused calls
- removed zealot 'const' from function protos and variables, these cannot
  work there, and hence gave warnings
- added void pointer casts for array conversions in matrix code

source/blender/blenkernel/BKE_action.h
source/blender/blenkernel/intern/action.c
source/blender/blenkernel/intern/armature.c
source/blender/blenkernel/intern/lattice.c

index 7407da435434274861313a12b3ec7aadb63fc645..5b4a0fa6c8e3e14b6c7e0d308d0c3d63dab4d338 100644 (file)
@@ -75,7 +75,7 @@ struct bPoseChannel *set_pose_channel(struct bPose *pose,
  * Allocate a new pose on the heap, and copy the src pose and it's channels
  * into the new pose. *dst is set to the newly allocated structure.
  */ 
-void copy_pose(struct bPose **dst, const struct bPose *src,
+void copy_pose(struct bPose **dst, struct bPose *src,
                           int copyconstraints);
 
 /**
@@ -108,7 +108,7 @@ struct bPoseChannel *verify_pose_channel(struct bPose* pose,
  * the contents of src into it. If src is NULL NULL is returned.
  */
 
-struct bAction *copy_action(const struct bAction *src);
+struct bAction *copy_action(struct bAction *src);
 
 /**
  * Some kind of bounding box operation on the action.
index 1740fe702475f371c9728355828862c45e701924..276112034715848cb6059d588ef937ce70113724 100644 (file)
 #endif
 
 /* Local function prototypes */
+
 static void do_pose_constraint_channels(bPose *pose, bAction *act, 
                                                                                float ctime);
-static void get_constraint_influence_from_pose(bPose *dst, bPose *src);
-static void blend_constraints(ListBase *dst, const ListBase *src,
-                                                         float srcweight, short mode);
+
 static void rest_pose(bPose *pose, int clearflag);
 
 /* Implementation */
@@ -112,6 +111,7 @@ static void rest_pose(bPose *pose, int clearflag)
        }
 }
 
+#ifdef __NLA_BLENDCON
 static void blend_constraints(ListBase *dst, const ListBase *src,
                                                          float srcweight, short mode)
 {
@@ -148,12 +148,13 @@ static void blend_constraints(ListBase *dst, const ListBase *src,
                }
        }
 }
+#endif
 
 void blend_poses(bPose *dst, const bPose *src, float srcweight, short mode)
 {
        bPoseChannel *dchan;
        const bPoseChannel *schan;
-       float   dquat[4], squat[4], mat[3][3];
+       float   dquat[4], squat[4]; //, mat[3][3];
        float dstweight;
        int i;
        
@@ -343,6 +344,7 @@ void get_pose_from_pose(bPose **pose, const bPose *src)
        }
 }
 
+#ifdef __NLA_BLENDCON
 static void get_constraint_influence_from_pose(bPose *dst, bPose *src)
 {
        bConstraint *dcon, *scon;
@@ -360,6 +362,7 @@ static void get_constraint_influence_from_pose(bPose *dst, bPose *src)
                }
        }
 }
+#endif
 
 /* If the pose does not exist, a new one is created */
 
@@ -719,7 +722,7 @@ void free_action(bAction *act)
                BLI_freelistN (&act->chanbase);
 }
 
-bAction* copy_action(const bAction *src)
+bAction* copy_action(bAction *src)
 {
        bAction *dst = NULL;
        bActionChannel *dchan, *schan;
@@ -752,12 +755,12 @@ bPoseChannel *copy_pose_channel(const bPoseChannel* src)
        return dst;
 }
 
-void copy_pose(bPose **dst, const bPose *src, int copycon)
+void copy_pose(bPose **dst, bPose *src, int copycon)
 {
        bPose *outPose;
-       const bPose * inPose;
+       bPose * inPose;
        bPoseChannel    *newChan;
-       const bPoseChannel *curChan;
+       bPoseChannel *curChan;
 
        inPose = src;
        
@@ -777,7 +780,7 @@ void copy_pose(bPose **dst, const bPose *src, int copycon)
                memcpy (newChan->loc, curChan->loc, sizeof (curChan->loc));
                memcpy (newChan->size, curChan->size, sizeof (curChan->size));
                memcpy (newChan->quat, curChan->quat, sizeof (curChan->quat));
-               Mat4CpyMat4 (newChan->obmat, curChan->obmat);
+               Mat4CpyMat4 (newChan->obmat, (void *)curChan->obmat);
 
                BLI_addtail (&outPose->chanbase, newChan);
                if (copycon){
index d0ee75df1a33ca1a8aeb5e3dd2b27292db9af1bc..1f96b48df9bd6285a4a39d09a9ff8af751233285 100644 (file)
@@ -1305,7 +1305,7 @@ void solve_posechain (PoseChain *chain)
 
                /* Retrieve the delta rotation from the solver */
                Mat4One(M_basischange);
-               Mat4CpyMat3(M_basischange, chain->solver->segments[i].basis_change);
+               Mat4CpyMat3(M_basischange, (void *)chain->solver->segments[i].basis_change);    //basis_change = array[9]
        
  
                /**
@@ -1440,8 +1440,8 @@ PoseChain *ik_chain_to_posechain (Object *ob, Bone *bone)
                Mat4MulMat4(M_basismat, R_bonemat, iR_parmat);
                
                /* Copy the matrix into the basis and transpose */
-               Mat3CpyMat4(segs[icurseg].basis, M_basismat);
-               Mat3Transp(segs[icurseg].basis);
+               Mat3CpyMat4((void *)segs[icurseg].basis, M_basismat);   // basis = array[9]
+               Mat3Transp((void *)segs[icurseg].basis);
 
                /* Fill out the IK segment */
                segs[icurseg].length = get_bone_length(curBone);
index 074bd8f561ba027f22b6270884a9291e1a73a30e..b5710565e61e52bc53157e4b3bd9df6dc2ec8e81 100644 (file)
@@ -243,7 +243,7 @@ void init_latt_deform(Object *oblatt, Object *ob)
        lattice_modifier(oblatt, 's');
        bp= deformLatt->def;
 
-       if(ob) where_is_object(ob);
+       //if(ob) where_is_object(ob); causes lag here, but why! (ton)
 
        /* for example with a particle system: ob==0 */
        if(ob==0) {