[Bf-blender-cvs] [d944146ebe5] functions: fix stack use out of scope error

Jacques Lucke noreply at git.blender.org
Sun Feb 2 14:27:14 CET 2020


Commit: d944146ebe53015f260296cc30021c218394ef08
Author: Jacques Lucke
Date:   Sun Feb 2 12:26:37 2020 +0100
Branches: functions
https://developer.blender.org/rBd944146ebe53015f260296cc30021c218394ef08

fix stack use out of scope error

===================================================================

M	source/blender/simulations/bparticles/particle_action.cpp

===================================================================

diff --git a/source/blender/simulations/bparticles/particle_action.cpp b/source/blender/simulations/bparticles/particle_action.cpp
index 800dbeffc62..9db3a914b9f 100644
--- a/source/blender/simulations/bparticles/particle_action.cpp
+++ b/source/blender/simulations/bparticles/particle_action.cpp
@@ -16,6 +16,7 @@ void ParticleAction::execute_from_emitter(AttributesRefGroup &new_particles,
                                           EmitterInterface &emitter_interface)
 {
   BufferCache buffer_cache;
+  std::array<BLI::class_id_t, 1> context_ids = {BLI::get_class_id<ParticleCurrentTimesContext>()};
 
   for (MutableAttributesRef attributes : new_particles) {
     ParticleCurrentTimesContext current_times_context;
@@ -25,7 +26,7 @@ void ParticleAction::execute_from_emitter(AttributesRefGroup &new_particles,
                                   IndexMask(attributes.size()),
                                   attributes,
                                   buffer_cache,
-                                  {BLI::get_class_id<ParticleCurrentTimesContext>()},
+                                  context_ids,
                                   {(void *)&current_times_context});
     this->execute(context);
   }
@@ -34,6 +35,7 @@ void ParticleAction::execute_from_emitter(AttributesRefGroup &new_particles,
 void ParticleAction::execute_for_new_particles(AttributesRefGroup &new_particles,
                                                ParticleActionContext &parent_context)
 {
+  std::array<BLI::class_id_t, 1> context_ids = {BLI::get_class_id<ParticleCurrentTimesContext>()};
 
   for (MutableAttributesRef attributes : new_particles) {
     ParticleCurrentTimesContext current_times_context;
@@ -43,7 +45,7 @@ void ParticleAction::execute_for_new_particles(AttributesRefGroup &new_particles
                                   IndexMask(attributes.size()),
                                   attributes,
                                   parent_context.buffer_cache(),
-                                  {BLI::get_class_id<ParticleCurrentTimesContext>()},
+                                  context_ids,
                                   {(void *)&current_times_context});
     this->execute(context);
   }
@@ -52,6 +54,8 @@ void ParticleAction::execute_for_new_particles(AttributesRefGroup &new_particles
 void ParticleAction::execute_for_new_particles(AttributesRefGroup &new_particles,
                                                OffsetHandlerInterface &offset_handler_interface)
 {
+  std::array<BLI::class_id_t, 1> context_ids = {BLI::get_class_id<ParticleCurrentTimesContext>()};
+
   for (MutableAttributesRef attributes : new_particles) {
     ParticleCurrentTimesContext current_times_context;
     current_times_context.current_times = attributes.get<float>("Birth Time");
@@ -60,7 +64,7 @@ void ParticleAction::execute_for_new_particles(AttributesRefGroup &new_particles
                                   IndexMask(attributes.size()),
                                   attributes,
                                   offset_handler_interface.buffer_cache(),
-                                  {BLI::get_class_id<ParticleCurrentTimesContext>()},
+                                  context_ids,
                                   {(void *)&current_times_context});
     this->execute(context);
   }
@@ -70,21 +74,22 @@ void ParticleAction::execute_from_event(EventExecuteInterface &event_interface)
 {
   ParticleCurrentTimesContext current_times_context;
   current_times_context.current_times = event_interface.current_times();
-
   ParticleIntegratedOffsets offsets_context = {event_interface.attribute_offsets()};
-
   ParticleRemainingTimeInStep remaining_time_context;
   remaining_time_context.remaining_times = event_interface.remaining_durations();
 
-  ParticleActionContext context(
-      event_interface.particle_allocator(),
-      event_interface.pindices(),
-      event_interface.attributes(),
-      event_interface.buffer_cache(),
-      {BLI::get_class_id<ParticleCurrentTimesContext>(),
-       BLI::get_class_id<ParticleIntegratedOffsets>(),
-       BLI::get_class_id<ParticleRemainingTimeInStep>()},
-      {(void *)&current_times_context, (void *)&offsets_context, (void *)&remaining_time_context});
+  std::array<BLI::class_id_t, 3> context_ids = {BLI::get_class_id<ParticleCurrentTimesContext>(),
+                                                BLI::get_class_id<ParticleIntegratedOffsets>(),
+                                                BLI::get_class_id<ParticleRemainingTimeInStep>()};
+  std::array<void *, 3> contexts = {
+      (void *)&current_times_context, (void *)&offsets_context, (void *)&remaining_time_context};
+
+  ParticleActionContext context(event_interface.particle_allocator(),
+                                event_interface.pindices(),
+                                event_interface.attributes(),
+                                event_interface.buffer_cache(),
+                                context_ids,
+                                contexts);
   this->execute(context);
 }
 
@@ -108,21 +113,22 @@ void ParticleAction::execute_from_offset_handler(OffsetHandlerInterface &offset_
 
   ParticleCurrentTimesContext current_times_context;
   current_times_context.current_times = current_times;
-
   ParticleIntegratedOffsets offsets_context = {offset_handler_interface.attribute_offsets()};
-
   ParticleRemainingTimeInStep remaining_time_context;
   remaining_time_context.remaining_times = offset_handler_interface.remaining_durations();
 
-  ParticleActionContext context(
-      offset_handler_interface.particle_allocator(),
-      offset_handler_interface.mask(),
-      offset_handler_interface.attributes(),
-      offset_handler_interface.buffer_cache(),
-      {BLI::get_class_id<ParticleCurrentTimesContext>(),
-       BLI::get_class_id<ParticleIntegratedOffsets>(),
-       BLI::get_class_id<ParticleRemainingTimeInStep>()},
-      {(void *)&current_times_context, (void *)&offsets_context, (void *)&remaining_time_context});
+  std::array<BLI::class_id_t, 3> context_ids = {BLI::get_class_id<ParticleCurrentTimesContext>(),
+                                                BLI::get_class_id<ParticleIntegratedOffsets>(),
+                                                BLI::get_class_id<ParticleRemainingTimeInStep>()};
+  std::array<void *, 3> contexts = {
+      (void *)&current_times_context, (void *)&offsets_context, (void *)&remaining_time_context};
+
+  ParticleActionContext context(offset_handler_interface.particle_allocator(),
+                                offset_handler_interface.mask(),
+                                offset_handler_interface.attributes(),
+                                offset_handler_interface.buffer_cache(),
+                                context_ids,
+                                contexts);
   this->execute(context);
 }



More information about the Bf-blender-cvs mailing list