[Bf-blender-cvs] [f5e1b218958] custom-manipulators: Merge branch 'blender2.8' into custom-manipulators
Campbell Barton
noreply at git.blender.org
Mon Jun 5 06:53:51 CEST 2017
Commit: f5e1b218958a563f13aeb96b855ac9b46f279da4
Author: Campbell Barton
Date: Mon Jun 5 14:47:35 2017 +1000
Branches: custom-manipulators
https://developer.blender.org/rBf5e1b218958a563f13aeb96b855ac9b46f279da4
Merge branch 'blender2.8' into custom-manipulators
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/armature.c
index 78120c054d7,6f04be653d1..c022611d17b
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@@ -2443,73 -2438,3 +2443,73 @@@ bPoseChannel *BKE_armature_splineik_sol
}
return rootchan;
}
+
+void BKE_pose_fmap_cache_update(Depsgraph *graph, Object *ob_pose)
+{
+ if (ELEM(NULL, ob_pose, ob_pose->pose)) {
+ return;
+ }
+
+ bool has_fmap = false;
+ for (bPoseChannel *pchan = ob_pose->pose->chanbase.first; pchan; pchan = pchan->next) {
+ MEM_SAFE_FREE(pchan->fmap_data);
+ if (pchan->bone->flag & BONE_DRAW_FMAP) {
+ has_fmap = true;
+ }
+ }
+
+ if (has_fmap == false) {
+ return;
+ }
+
+ BKE_pose_channels_hash_make(ob_pose->pose);
+
+ Scene *scene = DEG_get_scene(graph);
+
+ VirtualModifierData virtualModifierData;
+
- DEG_OBJECT_ITER(graph, ob)
++ DEG_OBJECT_ITER(graph, ob, 0)
+ {
+ if ((ob->type == OB_MESH) && !BLI_listbase_is_empty(&ob->fmaps)) {
+ bool use_ob_fmap = false;
+ ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
+ for (; md; md = md->next) {
+ if (modifier_isEnabled(scene, md, eModifierMode_Realtime) && md->type == eModifierType_Armature) {
+ ArmatureModifierData *amd = (ArmatureModifierData *)md;
+ if (amd->object && (amd->deformflag & ARM_DEF_FACEMAPS)) {
+ if (amd->object == ob_pose) {
+ use_ob_fmap = true;
+ break;
+ }
+ }
+ }
+ }
+
+ /* bone parent */
+ if (use_ob_fmap == false) {
+ if (ob->parent == ob_pose && ob->parsubstr[0]) {
+ use_ob_fmap = true;
+ }
+ }
+
+ if (use_ob_fmap) {
+ /* We know that 'ob' is a mesh that is deformed by 'ob_act'. */
+ for (bFaceMap *fmap = ob->fmaps.first; fmap; fmap = fmap->next) {
+ bPoseChannel *pchan = BKE_pose_channel_find_name(ob_pose->pose, fmap->name);
+ if (pchan && pchan->bone->flag & BONE_DRAW_FMAP) {
+ if (pchan->fmap_data != NULL) {
+ /* XXX, we could support multiple meshes per bone,
+ * it's a corner-case so only add if users end up needing it. */
+ continue;
+ }
+
+ pchan->fmap_data = MEM_mallocN(sizeof(*pchan->fmap_data), __func__);
+ pchan->fmap_data->object = ob;
+ pchan->fmap_data->fmap = fmap;
+ }
+ }
+ }
+ }
+ }
+ DEG_OBJECT_ITER_END
+}
diff --cc source/blender/depsgraph/intern/depsgraph_query.cc
index 8411393e812,4241325d571..6d73f4a57ea
--- a/source/blender/depsgraph/intern/depsgraph_query.cc
+++ b/source/blender/depsgraph/intern/depsgraph_query.cc
@@@ -137,16 -188,18 +188,19 @@@ void DEG_objects_iterator_next(BLI_Iter
/* Make sure we have the base collection settings is already populated.
* This will fail when BKE_layer_eval_layer_collection_pre hasn't run yet
* Which usually means a missing call to DAG_id_tag_update(). */
- BLI_assert(!BLI_listbase_is_empty(&base->collection_properties->data.group));
+ BLI_assert((base->collection_properties == NULL) ||
+ !BLI_listbase_is_empty(&base->collection_properties->data.group));
/* Flushing depsgraph data. */
- ob->base_flag = (base->flag | BASE_FROM_SET) & data->flag;
- ob->base_collection_properties = base->collection_properties;
- ob->base_selection_color = base->selcol;
- data->base = base;
+ deg_flush_data(ob, base, data->base_flag);
+
+ if ((data->flag & DEG_OBJECT_ITER_FLAG_DUPLI) && (ob->transflag & OB_DUPLI)) {
+ data->dupli_list = object_duplilist(data->eval_ctx, data->scene, ob);
+ data->dupli_object = (DupliObject *)data->dupli_list->first;
+ }
return;
}
+
base = base->next;
}
More information about the Bf-blender-cvs
mailing list