Commit: e2bac484e02a26616419a4b51385e7068545c44b
Author: Dalai Felinto
Date:   Tue May 29 16:11:08 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBe2bac484e02a26616419a4b51385e7068545c44b

Use correct time for curve parent evaluation

Time should alwaus come from depsgraph, not scene.

===================================================================

M       source/blender/blenkernel/BKE_object.h
M       source/blender/blenkernel/BKE_tracking.h
M       source/blender/blenkernel/intern/constraint.c
M       source/blender/blenkernel/intern/object.c
M       source/blender/blenkernel/intern/object_update.c
M       source/blender/blenkernel/intern/tracking.c
M       source/blender/editors/space_clip/tracking_ops_orient.c
M       source/blender/editors/space_view3d/view3d_snap.c
M       source/blender/editors/transform/transform_snap_object.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_object.h 
b/source/blender/blenkernel/BKE_object.h
index a7cdef06268..4621f2fbe31 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -142,7 +142,7 @@ struct Base **BKE_object_pose_base_array_get_unique(struct 
ViewLayer *view_layer
 struct Base **BKE_object_pose_base_array_get(struct ViewLayer *view_layer, 
unsigned int *r_bases_len);
 
 void BKE_object_get_parent_matrix(
-        struct Scene *scene, struct Object *ob,
+        struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob,
         struct Object *par, float parentmat[4][4]);
 void BKE_object_where_is_calc(
         struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob);
@@ -154,7 +154,8 @@ void BKE_object_where_is_calc_time(
 void BKE_object_where_is_calc_time_ex(
         struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, 
float ctime,
         struct RigidBodyWorld *rbw, float r_originmat[3][3]);
-void BKE_object_where_is_calc_mat4(struct Scene *scene, struct Object *ob, 
float obmat[4][4]);
+void BKE_object_where_is_calc_mat4(
+        struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, 
float obmat[4][4]);
 
 /* possibly belong in own moduke? */
 struct BoundBox *BKE_boundbox_alloc_unit(void);
diff --git a/source/blender/blenkernel/BKE_tracking.h 
b/source/blender/blenkernel/BKE_tracking.h
index 13302caa09d..0c3b118d947 100644
--- a/source/blender/blenkernel/BKE_tracking.h
+++ b/source/blender/blenkernel/BKE_tracking.h
@@ -32,6 +32,7 @@
  *  \author Sergey Sharybin
  */
 
+struct Depsgraph;
 struct bGPDlayer;
 struct ImBuf;
 struct ListBase;
@@ -61,7 +62,8 @@ struct ListBase *BKE_tracking_get_active_plane_tracks(struct 
MovieTracking *trac
 struct MovieTrackingReconstruction 
*BKE_tracking_get_active_reconstruction(struct MovieTracking *tracking);
 
 /* matrices for constraints and drawing */
-void BKE_tracking_get_camera_object_matrix(struct Scene *scene, struct Object 
*ob, float mat[4][4]);
+void BKE_tracking_get_camera_object_matrix(
+        struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, 
float mat[4][4]);
 void BKE_tracking_get_projection_matrix(struct MovieTracking *tracking, struct 
MovieTrackingObject *object,
                                         int framenr, int winx, int winy, float 
mat[4][4]);
 
diff --git a/source/blender/blenkernel/intern/constraint.c 
b/source/blender/blenkernel/intern/constraint.c
index 28c6fe852c2..385c0f7f6bf 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -3963,7 +3963,7 @@ static void followtrack_evaluate(bConstraint *con, 
bConstraintOb *cob, ListBase
                                translate_m4(cob->matrix, track->bundle_pos[0], 
track->bundle_pos[1], track->bundle_pos[2]);
                        }
                        else {
-                               
BKE_tracking_get_camera_object_matrix(cob->scene, camob_eval, mat);
+                               
BKE_tracking_get_camera_object_matrix(depsgraph, cob->scene, camob_eval, mat);
 
                                mul_m4_m4m4(cob->matrix, obmat, mat);
                                translate_m4(cob->matrix, track->bundle_pos[0], 
track->bundle_pos[1], track->bundle_pos[2]);
@@ -3975,7 +3975,7 @@ static void followtrack_evaluate(bConstraint *con, 
bConstraintOb *cob, ListBase
                float aspect = (scene->r.xsch * scene->r.xasp) / (scene->r.ysch 
* scene->r.yasp);
                float len, d;
 
-               BKE_object_where_is_calc_mat4(scene, camob_eval, mat);
+               BKE_object_where_is_calc_mat4(depsgraph, scene, camob_eval, 
mat);
 
                /* camera axis */
                vec[0] = 0.0f;
@@ -4238,7 +4238,7 @@ static void objectsolver_evaluate(bConstraint *con, 
bConstraintOb *cob, ListBase
                        float ctime = DEG_get_ctime(depsgraph);
                        float framenr = 
BKE_movieclip_remap_scene_to_clip_frame(clip, ctime);
 
-                       BKE_object_where_is_calc_mat4(scene, camob, cammat);
+                       BKE_object_where_is_calc_mat4(depsgraph, scene, camob, 
cammat);
 
                        
BKE_tracking_camera_get_reconstructed_interpolate(tracking, object, framenr, 
mat);
 
diff --git a/source/blender/blenkernel/intern/object.c 
b/source/blender/blenkernel/intern/object.c
index 02e0d46e5c1..9c9d3b4088e 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1681,7 +1681,7 @@ void BKE_object_matrix_local_get(struct Object *ob, float 
mat[4][4])
        if (ob->parent) {
                float par_imat[4][4];
 
-               BKE_object_get_parent_matrix(NULL, ob, ob->parent, par_imat);
+               BKE_object_get_parent_matrix(NULL, NULL, ob, ob->parent, 
par_imat);
                invert_m4(par_imat);
                mul_m4_m4m4(mat, par_imat, ob->obmat);
        }
@@ -1697,7 +1697,7 @@ int enable_cu_speed = 1;
  * \param scene: Used when curve cache needs to be calculated, or for 
dupli-frame time.
  * \return success if \a mat is set.
  */
-static bool ob_parcurve(Scene *scene, Object *ob, Object *par, float mat[4][4])
+static bool ob_parcurve(Depsgraph *depsgraph, Scene *UNUSED(scene), Object 
*ob, Object *par, float mat[4][4])
 {
        Curve *cu = par->data;
        float vec[4], dir[3], quat[4], radius, ctime;
@@ -1736,11 +1736,11 @@ static bool ob_parcurve(Scene *scene, Object *ob, 
Object *par, float mat[4][4])
        }
        else {
                /* For dupli-frames only */
-               if (scene == NULL) {
+               if (depsgraph == NULL) {
                        return false;
                }
 
-               ctime = BKE_scene_frame_get(scene);
+               ctime = DEG_get_ctime(depsgraph);
                if (cu->pathlen) {
                        ctime /= cu->pathlen;
                }
@@ -1991,7 +1991,7 @@ static void ob_parvert3(Object *ob, Object *par, float 
mat[4][4])
 }
 
 
-void BKE_object_get_parent_matrix(Scene *scene, Object *ob, Object *par, float 
parentmat[4][4])
+void BKE_object_get_parent_matrix(Depsgraph *depsgraph, Scene *scene, Object 
*ob, Object *par, float parentmat[4][4])
 {
        float tmat[4][4];
        float vec[3];
@@ -2002,7 +2002,7 @@ void BKE_object_get_parent_matrix(Scene *scene, Object 
*ob, Object *par, float p
                        ok = 0;
                        if (par->type == OB_CURVE) {
                                if ((((Curve *)par->data)->flag & CU_PATH) &&
-                                   (ob_parcurve(scene, ob, par, tmat)))
+                                   (ob_parcurve(depsgraph, scene, ob, par, 
tmat)))
                                {
                                        ok = 1;
                                }
@@ -2038,7 +2038,8 @@ void BKE_object_get_parent_matrix(Scene *scene, Object 
*ob, Object *par, float p
 /**
  * \param r_originmat  Optional matrix that stores the space the object is in 
(without its own matrix applied)
  */
-static void solve_parenting(Scene *scene, Object *ob, Object *par, float 
obmat[4][4], float slowmat[4][4],
+static void solve_parenting(Depsgraph *depsgraph,
+                            Scene *scene, Object *ob, Object *par, float 
obmat[4][4], float slowmat[4][4],
                             float r_originmat[3][3], const bool set_origin)
 {
        float totmat[4][4];
@@ -2049,7 +2050,7 @@ static void solve_parenting(Scene *scene, Object *ob, 
Object *par, float obmat[4
        
        if (ob->partype & PARSLOW) copy_m4_m4(slowmat, obmat);
 
-       BKE_object_get_parent_matrix(scene, ob, par, totmat);
+       BKE_object_get_parent_matrix(depsgraph, scene, ob, par, totmat);
        
        /* total */
        mul_m4_m4m4(tmat, totmat, ob->parentinv);
@@ -2106,7 +2107,7 @@ void BKE_object_where_is_calc_time_ex(
                float slowmat[4][4];
                
                /* calculate parent matrix */
-               solve_parenting(scene, ob, par, ob->obmat, slowmat, 
r_originmat, true);
+               solve_parenting(depsgraph, scene, ob, par, ob->obmat, slowmat, 
r_originmat, true);
                
                /* "slow parent" is definitely not threadsafe, and may also 
give bad results jumping around 
                 * An old-fashioned hack which probably doesn't really cut it 
anymore
@@ -2147,7 +2148,7 @@ void BKE_object_where_is_calc_time(Depsgraph *depsgraph, 
Scene *scene, Object *o
  * constraints -- assume dependencies are already solved by depsgraph.
  * no changes to object and it's parent would be done.
  * used for bundles orientation in 3d space relative to parented blender 
camera */
-void BKE_object_where_is_calc_mat4(Scene *scene, Object *ob, float obmat[4][4])
+void BKE_object_where_is_calc_mat4(Depsgraph *depsgraph, Scene *scene, Object 
*ob, float obmat[4][4])
 {
 
        if (ob->parent) {
@@ -2155,7 +2156,7 @@ void BKE_object_where_is_calc_mat4(Scene *scene, Object 
*ob, float obmat[4][4])
 
                Object *par = ob->parent;
                
-               solve_parenting(scene, ob, par, obmat, slowmat, NULL, false);
+               solve_parenting(depsgraph, scene, ob, par, obmat, slowmat, 
NULL, false);
                
                if (ob->partype & PARSLOW)
                        where_is_object_parslow(ob, obmat, slowmat);
@@ -2225,7 +2226,7 @@ void BKE_object_apply_mat4_ex(Object *ob, float 
mat[4][4], Object *parent, float
        if (parent != NULL) {
                float rmat[4][4], diff_mat[4][4], imat[4][4], parent_mat[4][4];
 
-               BKE_object_get_parent_matrix(NULL, ob, parent, parent_mat);
+               BKE_object_get_parent_matrix(NULL, NULL, ob, parent, 
parent_mat);
 
                mul_m4_m4m4(diff_mat, parent_mat, parentinv);
                invert_m4_m4(imat, diff_mat);
diff --git a/source/blender/blenkernel/intern/object_update.c 
b/source/blender/blenkernel/intern/object_update.c
index d21a1326392..1778eaeae75 100644
--- a/source/blender/blenkernel/intern/object_update.c
+++ b/source/blender/blenkernel/intern/object_update.c
@@ -95,7 +95,7 @@ void BKE_object_eval_parent(Depsgraph *depsgraph,
        copy_m4_m4(locmat, ob->obmat);
 
        /* get parent effect matrix */
-       BKE_object_get_parent_matrix(scene, ob, par, totmat);
+       BKE_object_get_parent_matrix(depsgraph, scene, ob, par, totmat);
 
        /* total */
        mul_m4_m4m4(tmat, totmat, ob->parentinv);
diff --git a/source/blender/blenkernel/intern/tracking.c 
b/source/blender/blenkernel/intern/tracking.c
index 3314e8d01b6..fe9cf1e9609 100644
--- a/source/blender/blenkernel/intern/tracking.c
+++ b/source/blender/blenkernel/intern/tracking.c
@@ -395,7 +395,7 @@ MovieTrackingReconstruction 
*BKE_tracking_get_active_reconstruction(MovieTrackin
 /* Get transformation matrix for a given object which is used
  * for parenting motion tracker reconstruction to 3D world.
  */
-void BKE_tracking_get_camera_object_matrix(Scene *scene, Object *ob, float 
mat[4][4])
+void BKE_tracking_get_camera_object_matrix(struct Depsgraph *depsgraph, Scene 
*scene, Object *ob, float mat[4][4])
 {
        if (!ob) {
                if (scene->camera)
@@ -405,7 +405,7 @@ void BKE_tracking_get_camera_object_matrix(Scene *scene, 
Object *ob, float mat[4
        }
 
        if (ob)
-               BKE_object_where_is_calc_mat4(scene, ob, mat);
+               BKE_object_where_is_calc_mat4(depsgraph, scene, ob, mat);
        else
 

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to