Fix T60127: Particles texture mapping coordinates objects
authorSergey Sharybin <sergey.vfx@gmail.com>
Mon, 28 Jan 2019 11:17:54 +0000 (12:17 +0100)
committerSergey Sharybin <sergey.vfx@gmail.com>
Mon, 28 Jan 2019 11:19:25 +0000 (12:19 +0100)
Part of the issue was a missing relation. Other part wes
aboud object's inverse matrix never being updated.

source/blender/blenkernel/intern/object_update.c
source/blender/depsgraph/intern/builder/deg_builder_relations.cc
source/blender/makesrna/intern/rna_particle.c

index c44a45e..5a25880 100644 (file)
@@ -145,7 +145,9 @@ void BKE_object_eval_constraints(Depsgraph *depsgraph,
 void BKE_object_eval_transform_final(Depsgraph *depsgraph, Object *ob)
 {
        DEG_debug_print_eval(depsgraph, __func__, ob->id.name, ob);
-
+       /* Make sure inverse matrix is always up to date. This way users of it
+        * do not need to worry about relcalculating it. */
+       invert_m4_m4(ob->imat, ob->obmat);
        /* Set negative scale flag in object. */
        if (is_negative_m4(ob->obmat)) ob->transflag |= OB_NEG_SCALE;
        else ob->transflag &= ~OB_NEG_SCALE;
index 1cb9385..27d8a41 100644 (file)
@@ -1868,6 +1868,14 @@ void DepsgraphRelationBuilder::build_particle_settings(ParticleSettings *part)
                             particle_settings_reset_key,
                             "Particle Texture",
                             DEPSREL_FLAG_FLUSH_USER_EDIT_ONLY);
+               /* TODO(sergey): Consider moving texture space handling to an own
+                * function. */
+               if (mtex->texco == TEXCO_OBJECT && mtex->object != NULL) {
+                       ComponentKey object_key(&mtex->object->id, DEG_NODE_TYPE_TRANSFORM);
+                       add_relation(object_key,
+                                    particle_settings_eval_key,
+                                    "Particle Texture Space");
+               }
        }
        if (check_id_has_anim_component(&part->id)) {
                ComponentKey animation_key(&part->id, DEG_NODE_TYPE_ANIMATION);
index c5ace46..e75802c 100644 (file)
@@ -1793,14 +1793,14 @@ static void rna_def_particle_settings_mtex(BlenderRNA *brna)
        RNA_def_property_enum_items(prop, texco_items);
        RNA_def_property_ui_text(prop, "Texture Coordinates",
                                 "Texture coordinates used to map the texture onto the background");
-       RNA_def_property_update(prop, 0, "rna_Particle_reset");
+       RNA_def_property_update(prop, 0, "rna_Particle_reset_dependency");
 
        prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "object");
        RNA_def_property_struct_type(prop, "Object");
        RNA_def_property_flag(prop, PROP_EDITABLE);
        RNA_def_property_ui_text(prop, "Object", "Object to use for mapping with Object texture coordinates");
-       RNA_def_property_update(prop, 0, "rna_Particle_reset");
+       RNA_def_property_update(prop, 0, "rna_Particle_reset_dependency");
 
        prop = RNA_def_property(srna, "uv_layer", PROP_STRING, PROP_NONE);
        RNA_def_property_string_sdna(prop, NULL, "uvname");