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:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-05-15 14:08:06 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-05-15 18:20:02 +0300
commitf43d33d3a404f9b3abdf1a3d44aeb646812506a4 (patch)
tree8147aa647d4f18d758950051343822174407b29d /source/blender/blenkernel
parent4f5bcc30d3447a7a498b124bf6e35fe177a8a320 (diff)
Depsgraph: Keep track of original particle system
Allows to have quicker lookup in particle edit mode.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_particle.h1
-rw-r--r--source/blender/blenkernel/intern/particle.c22
2 files changed, 10 insertions, 13 deletions
diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h
index 0c8d00e16a3..c2217969c98 100644
--- a/source/blender/blenkernel/BKE_particle.h
+++ b/source/blender/blenkernel/BKE_particle.h
@@ -302,6 +302,7 @@ void psys_set_current_num(Object *ob, int index);
struct LatticeDeformData *psys_create_lattice_deform_data(struct ParticleSimulationData *sim);
+struct ParticleSystem *psys_original_get(struct ParticleSystem *psys);
bool psys_in_edit_mode(struct Depsgraph *depsgraph, struct ParticleSystem *psys);
bool psys_check_enabled(struct Object *ob, struct ParticleSystem *psys, const bool use_render_params);
bool psys_check_edited(struct ParticleSystem *psys);
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index d740963cde8..0f23fc1deea 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -289,6 +289,14 @@ void psys_enable_all(Object *ob)
psys->flag &= ~PSYS_DISABLED;
}
+ParticleSystem *psys_original_get(ParticleSystem *psys)
+{
+ if (psys->orig_psys == NULL) {
+ return psys;
+ }
+ return psys->orig_psys;
+}
+
bool psys_in_edit_mode(Depsgraph *depsgraph, ParticleSystem *psys)
{
const ViewLayer *view_layer = DEG_get_input_view_layer(depsgraph);
@@ -301,19 +309,7 @@ bool psys_in_edit_mode(Depsgraph *depsgraph, ParticleSystem *psys)
if (object->mode != OB_MODE_PARTICLE_EDIT) {
return false;
}
- /* TODO(sergey): Find a faster way to switch to an original psys. */
- /*const*/ Object *object_orig = DEG_get_original_object(view_layer->basact->object);
- ParticleSystem *psys_orig = object_orig->particlesystem.first;
- while (psys_orig != NULL) {
- if (STREQ(psys_orig->name, psys->name)) {
- break;
- }
- psys = psys->next;
- psys_orig = psys_orig->next;
- }
- if (psys_orig != psys_get_current(object_orig)) {
- return false;
- }
+ ParticleSystem *psys_orig = psys_original_get(psys);
return (psys_orig->edit || psys->pointcache->edit) &&
(use_render_params == false);
}