[Bf-blender-cvs] [6e83213a5f4] functions: utility to iterate over trivial particle indices

Jacques Lucke noreply at git.blender.org
Mon Jul 29 17:57:07 CEST 2019


Commit: 6e83213a5f405ee35fdb25a9c6fefc6dcbb16fb0
Author: Jacques Lucke
Date:   Mon Jul 29 10:06:48 2019 +0200
Branches: functions
https://developer.blender.org/rB6e83213a5f405ee35fdb25a9c6fefc6dcbb16fb0

utility to iterate over trivial particle indices

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

M	source/blender/simulations/bparticles/particle_set.hpp
M	source/blender/simulations/bparticles/simulate.cpp

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

diff --git a/source/blender/simulations/bparticles/particle_set.hpp b/source/blender/simulations/bparticles/particle_set.hpp
index 061e1eeab9a..01b02006a16 100644
--- a/source/blender/simulations/bparticles/particle_set.hpp
+++ b/source/blender/simulations/bparticles/particle_set.hpp
@@ -45,6 +45,8 @@ struct ParticleSet {
    * Returns true when pindices()[i] == i for all i, otherwise false.
    */
   bool pindices_are_trivial();
+
+  Range<uint> trivial_pindices();
 };
 
 class ParticleSets {
@@ -134,6 +136,17 @@ inline bool ParticleSet::pindices_are_trivial()
   }
 }
 
+inline Range<uint> ParticleSet::trivial_pindices()
+{
+  BLI_assert(this->pindices_are_trivial());
+  if (m_pindices.size() == 0) {
+    return Range<uint>(0, 0);
+  }
+  else {
+    return Range<uint>(m_pindices.first(), m_pindices.last() + 1);
+  }
+}
+
 /* ParticleSets inline functions
  ********************************************/
 
diff --git a/source/blender/simulations/bparticles/simulate.cpp b/source/blender/simulations/bparticles/simulate.cpp
index 368dd881e77..d04ceae3eb6 100644
--- a/source/blender/simulations/bparticles/simulate.cpp
+++ b/source/blender/simulations/bparticles/simulate.cpp
@@ -82,7 +82,7 @@ BLI_NOINLINE static void forward_particles_to_next_event_or_end(
     auto offsets = attribute_offsets.get_float3(attribute_index);
 
     if (particles.pindices_are_trivial()) {
-      for (uint pindex = 0; pindex < particles.size(); pindex++) {
+      for (uint pindex : particles.trivial_pindices()) {
         float time_factor = time_factors_to_next_event[pindex];
         values[pindex] += time_factor * offsets[pindex];
       }



More information about the Bf-blender-cvs mailing list