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:
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c8
-rw-r--r--source/blender/makesdna/DNA_object_types.h1
-rw-r--r--source/blender/modifiers/intern/MOD_particlesystem.c7
3 files changed, 10 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 9aaeb4c8baf..30804518e1d 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -2249,8 +2249,16 @@ DerivedMesh *mesh_create_derived_view(Scene *scene, Object *ob, CustomDataMask d
{
DerivedMesh *final;
+ /* XXX hack
+ * psys modifier updates particle state when called during dupli-list generation,
+ * which can lead to wrong transforms. This disables particle system modifier execution.
+ */
+ ob->transflag |= OB_NO_PSYS_UPDATE;
+
mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 0, 1, 0, dataMask, -1, 0, 0);
+ ob->transflag &= ~OB_NO_PSYS_UPDATE;
+
return final;
}
diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h
index 3a8620fdaba..2fc04c4a5db 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -378,6 +378,7 @@ typedef struct DupliObject {
#define OB_DUPLIPARTS 2048
#define OB_RENDER_DUPLI 4096
#define OB_NO_CONSTRAINTS 8192 /* runtime constraints disable */
+#define OB_NO_PSYS_UPDATE 16384 /* hack to work around particle issue */
/* (short) ipoflag */
/* XXX: many old flags for features removed due to incompatibility
diff --git a/source/blender/modifiers/intern/MOD_particlesystem.c b/source/blender/modifiers/intern/MOD_particlesystem.c
index c4db9375a4a..6d6c1361566 100644
--- a/source/blender/modifiers/intern/MOD_particlesystem.c
+++ b/source/blender/modifiers/intern/MOD_particlesystem.c
@@ -190,12 +190,7 @@ static void deformVerts(ModifierData *md, Object *ob,
psmd->totdmface = psmd->dm->getNumTessFaces(psmd->dm);
}
- /* skip the particle update if no timestep is performed or initialization required.
- * XXX this is a workaround for bug #32846, which is caused by modifier updates
- * during dupli-list generation (in cycles). The dupli-list generation can temporarily change
- * the ob->obmat matrix, which in turn leads to wrong particle states if used for reset ...
- */
- if (psys->cfra != cfra || psys->recalc) {
+ if (!(ob->transflag & OB_NO_PSYS_UPDATE)) {
psmd->flag &= ~eParticleSystemFlag_psys_updated;
particle_system_update(md->scene, ob, psys);
psmd->flag |= eParticleSystemFlag_psys_updated;