[Bf-blender-cvs] [55e719ec35a] blender2.8: Merge branch 'master' into blender2.8
Campbell Barton
noreply at git.blender.org
Wed Nov 14 07:22:28 CET 2018
Commit: 55e719ec35a10c3f9e7231dee13d4b05aad7d965
Author: Campbell Barton
Date: Wed Nov 14 17:12:52 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB55e719ec35a10c3f9e7231dee13d4b05aad7d965
Merge branch 'master' into blender2.8
===================================================================
===================================================================
diff --cc source/blender/blenkernel/BKE_dynamicpaint.h
index 537a2946f36,c265672da88..cffadeb5fd9
--- a/source/blender/blenkernel/BKE_dynamicpaint.h
+++ b/source/blender/blenkernel/BKE_dynamicpaint.h
@@@ -27,14 -27,11 +27,14 @@@
* \ingroup bke
*/
-struct EvaluationContext;
+struct Depsgraph;
+struct DynamicPaintCanvasSettings;
+struct DynamicPaintModifierData;
struct Main;
struct Scene;
+struct ViewLayer;
--/* Actual surface point */
++/* Actual surface point */
typedef struct PaintSurfaceData {
void *format_data; /* special data for each surface "format" */
void *type_data; /* data used by specific surface type */
@@@ -45,7 -42,7 +45,7 @@@
} PaintSurfaceData;
--/* Paint type surface point */
++/* Paint type surface point */
typedef struct PaintPoint {
/* Wet paint is handled at effect layer only
@@@ -56,7 -53,7 +56,7 @@@
float color[4];
} PaintPoint;
--/* height field waves */
++/* height field waves */
typedef struct PaintWavePoint {
float height;
diff --cc source/blender/blenkernel/intern/anim.c
index 89291b158b7,d5f269b82a8..c3b6041243d
--- a/source/blender/blenkernel/intern/anim.c
+++ b/source/blender/blenkernel/intern/anim.c
@@@ -347,34 -367,25 +347,34 @@@ static void motionpaths_calc_bake_targe
/* for each target, check if it can be baked on the current frame */
for (mpt = targets->first; mpt; mpt = mpt->next) {
bMotionPath *mpath = mpt->mpath;
- bMotionPathVert *mpv;
/* current frame must be within the range the cache works for
- * - is inclusive of the first frame, but not the last otherwise we get buffer overruns
+ * - is inclusive of the first frame, but not the last otherwise we get buffer overruns
*/
- if ((CFRA < mpath->start_frame) || (CFRA >= mpath->end_frame))
+ if ((cframe < mpath->start_frame) || (cframe >= mpath->end_frame)) {
continue;
+ }
/* get the relevant cache vert to write to */
- mpv = mpath->points + (CFRA - mpath->start_frame);
+ bMotionPathVert *mpv = mpath->points + (cframe - mpath->start_frame);
- /* pose-channel or object path baking? */
+ Object *ob_eval = mpt->ob_eval;
+
+ /* Lookup evaluated pose channel, here because the depsgraph
+ * evaluation can change them so they are not cached in mpt. */
+ bPoseChannel *pchan_eval = NULL;
if (mpt->pchan) {
+ pchan_eval = BKE_pose_channel_find_name(ob_eval->pose, mpt->pchan->name);
+ }
+
+ /* pose-channel or object path baking? */
+ if (pchan_eval) {
/* heads or tails */
if (mpath->flag & MOTIONPATH_FLAG_BHEAD) {
- copy_v3_v3(mpv->co, mpt->pchan->pose_head);
+ copy_v3_v3(mpv->co, pchan_eval->pose_head);
}
else {
- copy_v3_v3(mpv->co, mpt->pchan->pose_tail);
+ copy_v3_v3(mpv->co, pchan_eval->pose_tail);
}
/* result must be in worldspace */
@@@ -414,18 -399,17 +414,18 @@@
}
/* Perform baking of the given object's and/or its bones' transforms to motion paths
- * - scene: current scene
- * - ob: object whose flagged motionpaths should get calculated
- * - recalc: whether we need to
+ * - scene: current scene
+ * - ob: object whose flagged motionpaths should get calculated
+ * - recalc: whether we need to
*/
/* TODO: include reports pointer? */
-void animviz_calc_motionpaths(Main *bmain, Scene *scene, ListBase *targets)
+void animviz_calc_motionpaths(Depsgraph *depsgraph,
+ Main *bmain,
+ Scene *scene,
+ ListBase *targets,
+ bool restore,
+ bool current_frame_only)
{
- MPathTarget *mpt;
- int sfra, efra;
- int cfra;
-
/* sanity check */
if (ELEM(NULL, targets, targets->first))
return;
diff --cc source/blender/blenkernel/intern/anim_sys.c
index d4355546c19,b17bc70c51a..351e765a8ea
--- a/source/blender/blenkernel/intern/anim_sys.c
+++ b/source/blender/blenkernel/intern/anim_sys.c
@@@ -1971,11 -1969,11 +1971,11 @@@ NlaEvalStrip *nlastrips_ctime_get_strip
}
/* evaluate strip's evaluation controls
- * - skip if no influence (i.e. same effect as muting the strip)
- * - negative influence is not supported yet... how would that be defined?
+ * - skip if no influence (i.e. same effect as muting the strip)
+ * - negative influence is not supported yet... how would that be defined?
*/
/* TODO: this sounds a bit hacky having a few isolated F-Curves stuck on some data it operates on... */
- nlastrip_evaluate_controls(estrip, ctime);
+ nlastrip_evaluate_controls(depsgraph, estrip, ctime);
if (estrip->influence <= 0.0f)
return NULL;
@@@ -2016,9 -2014,9 +2016,9 @@@
/* ---------------------- */
/* find an NlaEvalChannel that matches the given criteria
- * - ptr and prop are the RNA data to find a match for
+ * - ptr and prop are the RNA data to find a match for
*/
-static NlaEvalChannel *nlaevalchan_find_match(ListBase *channels, PointerRNA *ptr, PropertyRNA *prop, int array_index)
+static NlaEvalChannel *nlaevalchan_find_match(ListBase *channels, const PathResolvedRNA *prna)
{
NlaEvalChannel *nec;
@@@ -2031,9 -2029,9 +2031,9 @@@
/* - comparing the PointerRNA's is done by comparing the pointers
* to the actual struct the property resides in, since that all the
* other data stored in PointerRNA cannot allow us to definitively
- * identify the data
+ * identify the data
*/
- if ((nec->ptr.data == ptr->data) && (nec->prop == prop) && (nec->index == array_index))
+ if ((nec->rna.ptr.data == prna->ptr.data) && (nec->rna.prop == prna->prop) && ELEM(nec->rna.prop_index, -1, prna->prop_index))
return nec;
}
@@@ -2585,10 -2625,21 +2585,10 @@@ static void animsys_evaluate_nla(Depsgr
}
/* NLA Evaluation function (mostly for use through do_animdata)
- * - All channels that will be affected are not cleared anymore. Instead, we just evaluate into
- * some temp channels, where values can be accumulated in one go.
+ * - All channels that will be affected are not cleared anymore. Instead, we just evaluate into
+ * some temp channels, where values can be accumulated in one go.
*/
-static void animsys_calculate_nla(PointerRNA *ptr, AnimData *adt, float ctime)
+static void animsys_calculate_nla(Depsgraph *depsgraph, PointerRNA *ptr, AnimData *adt, float ctime)
{
ListBase echannels = {NULL, NULL};
@@@ -2682,9 -2746,9 +2682,9 @@@ void BKE_animsys_evaluate_animdata(Deps
/* evaluate NLA data */
if ((adt->nla_tracks.first) && !(adt->flag & ADT_NLA_EVAL_OFF)) {
/* evaluate NLA-stack
- * - active action is evaluated as part of the NLA stack as the last item
+ * - active action is evaluated as part of the NLA stack as the last item
*/
- animsys_calculate_nla(&id_ptr, adt, ctime);
+ animsys_calculate_nla(depsgraph, &id_ptr, adt, ctime);
}
/* evaluate Active Action only */
else if (adt->action)
diff --cc source/blender/blenkernel/intern/armature.c
index fa5b59b739d,4ad9e9c8205..66106a97566
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@@ -2330,11 -2311,11 +2330,11 @@@ void BKE_pose_where_is(struct Depsgrap
}
/* 2a. construct the IK tree (standard IK) */
- BIK_initialize_tree(scene, ob, ctime);
+ BIK_initialize_tree(depsgraph, scene, ob, ctime);
/* 2b. construct the Spline IK trees
- * - this is not integrated as an IK plugin, since it should be able
- * to function in conjunction with standard IK
+ * - this is not integrated as an IK plugin, since it should be able
+ * to function in conjunction with standard IK
*/
BKE_pose_splineik_init_tree(scene, ob, ctime);
diff --cc source/blender/blenkernel/intern/armature_update.c
index 2d9e2a0d84b,241a842d73f..ce87050f8bf
--- a/source/blender/blenkernel/intern/armature_update.c
+++ b/source/blender/blenkernel/intern/armature_update.c
@@@ -621,10 -602,10 +621,10 @@@ void BKE_pose_eval_init_ik(struct Depsg
return;
}
/* construct the IK tree (standard IK) */
- BIK_initialize_tree(scene, ob, ctime);
+ BIK_initialize_tree(depsgraph, scene, ob, ctime);
/* construct the Spline IK trees
- * - this is not integrated as an IK plugin, since it should be able
- * to function in conjunction with standard IK
+ * - this is not integrated as an IK plugin, since it should be able
+ * to function in conjunction with standard IK
*/
BKE_pose_splineik_init_tree(scene, ob, ctime);
}
diff --cc source/blender/blenkernel/intern/constraint.c
index dccc959b4ea,66147c44352..e16117745c9
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@@ -434,63 -443,48 +434,63 @@@ static void contarget_get_mesh_mat(Obje
weightsum += dw->weight;
}
}
+ }
+ }
+ else if (em) {
+ if (CustomData_has_layer(&em->bm->vdata, CD_MDEFORMVERT)) {
+ BMVert *v;
+ BMIter iter;
- /* calculate averages of normal and coordinates */
- if (weightsum > 0) {
- mul_v3_fl(vec, 1.0f / weightsum);
- mul_v3_fl(normal, 1.0f / weightsum);
- }
-
+ BM_ITER_MESH (v, &iter, em->bm, BM_VERTS_OF_MESH) {
+ MDeformVert *dv = CustomData_bmesh_get(&em->bm->vdata, v->head.data, CD_MDEFORMVERT);
+ MDeformWeight *dw = defvert_find_index(dv, defgroup);
- /* derive the rotation from the average normal:
- * - code taken from transform_manipulator.c,
- * calc_manipulator_stats, V3D_MANIP_NORMAL case
- */
- /* we need the transpose of the inverse for a normal... */
- copy_m3_m4(imat, ob->obmat);
+ if (dw && dw->weight > 0.0f) {
+ madd_v3_v3fl(vec, v->co, dw->weight);
+ madd_v3_v3fl(normal, v->no, dw->weight);
+ weightsum += dw->weight;
+ }
+ }
+ }
+ }
+ else {
+ /* No valid edit or evaluated mesh, just abort. */
+ return;
+ }
- invert_m3_m3(tmat, imat);
- transpose_m3(tmat);
- mul_m3_v3(tmat, normal);
+ /* calculate averages of normal and coordinates */
+ if (weightsum > 0) {
+ mul_v3_fl(vec, 1.0f / weightsum);
+ mul_v3_fl(normal, 1.0f / weightsum);
+ }
- normalize_v3(normal);
- c
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list