Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2012-04-01 19:02:19 +0400
committerBastien Montagne <montagne29@wanadoo.fr>2012-04-01 19:02:19 +0400
commite0ead2631280df9c18f966169a7e3fd561e33e1b (patch)
tree9d85b57c266c154bb8c610b41386a33de4f914d8 /source/blender/blenkernel/intern/DerivedMesh.c
parentb1951ac1bad4190ca46b6e6b1a0140fd5ae31a8c (diff)
Partial fix [#30744] BMesh: Particle system face/volume emission doesn't work if there is a constructive modifier earlier.
When ORIGSPACE is added, it is now a loop data, so we need to mark tessdata as dirty too. Also fixed DM_ensure_tessface to check DM_DIRTY_TESS_CDLAYERS flag! This fixes problems with subsurf + dynapaint + particles, however, some modifiers, like remesh, seems to create a new dm from scratch, hence loosing completely those CD layers… Note this bug already existed in 2.62, so this is not a regression.
Diffstat (limited to 'source/blender/blenkernel/intern/DerivedMesh.c')
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 0041553ec44..65ef4e5b431 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -382,6 +382,13 @@ void DM_ensure_tessface(DerivedMesh *dm)
__func__, numPolys, dm->type);
}
}
+
+ else if (dm->dirty && DM_DIRTY_TESS_CDLAYERS) {
+ BLI_assert(CustomData_has_layer(&dm->faceData, CD_POLYINDEX));
+ DM_update_tessface_data(dm);
+ }
+
+ dm->dirty &= ~DM_DIRTY_TESS_CDLAYERS;
}
/* Update tessface CD data from loop/poly ones. Needed when not retessellating after modstack evaluation. */
@@ -1629,7 +1636,7 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
deformedVerts = NULL;
}
- }
+ }
/* create an orco derivedmesh in parallel */
if (nextmask & CD_MASK_ORCO) {
@@ -3061,6 +3068,8 @@ void DM_init_origspace(DerivedMesh *dm)
}
}
}
+
+ dm->dirty |= DM_DIRTY_TESS_CDLAYERS;
}