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:
Diffstat (limited to 'source/blender/draw/intern/draw_cache_impl_particles.c')
-rw-r--r--source/blender/draw/intern/draw_cache_impl_particles.c31
1 files changed, 22 insertions, 9 deletions
diff --git a/source/blender/draw/intern/draw_cache_impl_particles.c b/source/blender/draw/intern/draw_cache_impl_particles.c
index 4102b72175f..f1ae9d6ef8c 100644
--- a/source/blender/draw/intern/draw_cache_impl_particles.c
+++ b/source/blender/draw/intern/draw_cache_impl_particles.c
@@ -597,10 +597,25 @@ Gwn_Batch *DRW_particles_batch_cache_get_dots(Object *object, ParticleSystem *ps
return cache->hairs;
}
-Gwn_Batch *DRW_particles_batch_cache_get_edit_strands(PTCacheEdit *edit)
+/* TODO(sergey): Avoid linear lookup. */
+static ParticleBatchCache *particle_batch_cache_get_edit(Object *object, PTCacheEdit *edit)
+{
+ ParticleSystem *psys_orig = edit->psys;
+ for (ParticleSystem *psys_eval = object->particlesystem.first;
+ psys_eval != NULL;
+ psys_eval = psys_eval->next)
+ {
+ if (STREQ(psys_orig->name, psys_eval->name)) {
+ return particle_batch_cache_get(psys_eval);
+ }
+ }
+ return NULL;
+}
+
+Gwn_Batch *DRW_particles_batch_cache_get_edit_strands(Object *object, PTCacheEdit *edit)
{
ParticleSystem *psys = edit->psys;
- ParticleBatchCache *cache = particle_batch_cache_get(psys);
+ ParticleBatchCache *cache = particle_batch_cache_get_edit(object, edit);
if (cache->hairs != NULL) {
return cache->hairs;
}
@@ -676,10 +691,9 @@ static void particle_batch_cache_ensure_edit_inner_pos(
}
}
-Gwn_Batch *DRW_particles_batch_cache_get_edit_inner_points(PTCacheEdit *edit)
+Gwn_Batch *DRW_particles_batch_cache_get_edit_inner_points(Object *object, PTCacheEdit *edit)
{
- ParticleSystem *psys = edit->psys;
- ParticleBatchCache *cache = particle_batch_cache_get(psys);
+ ParticleBatchCache *cache = particle_batch_cache_get_edit(object, edit);
if (cache->edit_inner_points != NULL) {
return cache->edit_inner_points;
}
@@ -692,7 +706,7 @@ Gwn_Batch *DRW_particles_batch_cache_get_edit_inner_points(PTCacheEdit *edit)
}
static void ensure_edit_tip_points_count(const PTCacheEdit *edit,
- ParticleBatchCache *cache)
+ ParticleBatchCache *cache)
{
if (cache->edit_tip_pos != NULL) {
return;
@@ -738,10 +752,9 @@ static void particle_batch_cache_ensure_edit_tip_pos(
}
}
-Gwn_Batch *DRW_particles_batch_cache_get_edit_tip_points(PTCacheEdit *edit)
+Gwn_Batch *DRW_particles_batch_cache_get_edit_tip_points(Object *object, PTCacheEdit *edit)
{
- ParticleSystem *psys = edit->psys;
- ParticleBatchCache *cache = particle_batch_cache_get(psys);
+ ParticleBatchCache *cache = particle_batch_cache_get_edit(object, edit);
if (cache->edit_tip_points != NULL) {
return cache->edit_tip_points;
}