[Bf-blender-cvs] [70ada64a980] functions: use index mask in event interface

Jacques Lucke noreply at git.blender.org
Fri Dec 20 18:23:15 CET 2019


Commit: 70ada64a980bc116eea497cfffc97de8e5aaeb03
Author: Jacques Lucke
Date:   Fri Dec 20 15:44:47 2019 +0100
Branches: functions
https://developer.blender.org/rB70ada64a980bc116eea497cfffc97de8e5aaeb03

use index mask in event interface

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

M	source/blender/simulations/bparticles/event_interface.hpp
M	source/blender/simulations/bparticles/events.cpp

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

diff --git a/source/blender/simulations/bparticles/event_interface.hpp b/source/blender/simulations/bparticles/event_interface.hpp
index 482ffa4cb58..1fd100dc1f7 100644
--- a/source/blender/simulations/bparticles/event_interface.hpp
+++ b/source/blender/simulations/bparticles/event_interface.hpp
@@ -1,32 +1,33 @@
 #pragma once
 
+#include "BLI_index_mask.h"
+
 #include "block_step_data.hpp"
 #include "particle_allocator.hpp"
 
 namespace BParticles {
 
+using BLI::IndexMask;
+
 /**
  * Interface between the Event->filter() function and the core simulation code.
  */
 class EventFilterInterface : public BlockStepDataAccess {
  private:
-  ArrayRef<uint> m_pindices;
+  IndexMask m_index_mask;
   ArrayRef<float> m_known_min_time_factors;
 
   Vector<uint> &m_filtered_pindices;
   Vector<float> &m_filtered_time_factors;
 
-  /* Size can be increased when necessary. */
-  char m_dummy_event_storage[64];
-
  public:
   EventFilterInterface(BlockStepData &step_data,
-                       ArrayRef<uint> pindices,
+                       IndexMask index_mask,
                        ArrayRef<float> known_min_time_factors,
                        Vector<uint> &r_filtered_pindices,
                        Vector<float> &r_filtered_time_factors)
       : BlockStepDataAccess(step_data),
-        m_pindices(pindices),
+        m_index_mask(index_mask),
         m_known_min_time_factors(known_min_time_factors),
         m_filtered_pindices(r_filtered_pindices),
         m_filtered_time_factors(r_filtered_time_factors)
@@ -36,9 +37,9 @@ class EventFilterInterface : public BlockStepDataAccess {
   /**
    * Return the indices that should be checked.
    */
-  ArrayRef<uint> pindices()
+  IndexMask index_mask()
   {
-    return m_pindices;
+    return m_index_mask;
   }
 
   /**
diff --git a/source/blender/simulations/bparticles/events.cpp b/source/blender/simulations/bparticles/events.cpp
index 335e407eab0..cfe78d2ea62 100644
--- a/source/blender/simulations/bparticles/events.cpp
+++ b/source/blender/simulations/bparticles/events.cpp
@@ -15,13 +15,13 @@ void AgeReachedEvent::filter(EventFilterInterface &interface)
   AttributesRef attributes = interface.attributes();
 
   auto inputs = ParticleFunctionResult::Compute(
-      *m_inputs_fn, interface.pindices(), interface.attributes());
+      *m_inputs_fn, interface.index_mask(), interface.attributes());
 
   float end_time = interface.step_end_time();
   auto birth_times = attributes.get<float>("Birth Time");
   auto was_activated_before = attributes.get<bool>(m_is_triggered_attribute);
 
-  for (uint pindex : interface.pindices()) {
+  for (uint pindex : interface.index_mask().indices()) {
     if (was_activated_before[pindex]) {
       continue;
     }
@@ -64,9 +64,9 @@ void CustomEvent::filter(EventFilterInterface &interface)
   auto was_activated_before = interface.attributes().get<bool>(m_is_triggered_attribute);
 
   LargeScopedVector<uint> pindices_to_check;
-  pindices_to_check.reserve(interface.pindices().size());
+  pindices_to_check.reserve(interface.index_mask().indices_amount());
 
-  for (uint pindex : interface.pindices()) {
+  for (uint pindex : interface.index_mask().indices()) {
     if (!was_activated_before[pindex]) {
       pindices_to_check.append(pindex);
     }
@@ -105,7 +105,7 @@ void MeshCollisionEvent::filter(EventFilterInterface &interface)
 
   uint current_update_index = interface.simulation_state().time().current_update_index();
 
-  for (uint pindex : interface.pindices()) {
+  for (uint pindex : interface.index_mask().indices()) {
     if (last_collision_step[pindex] == current_update_index) {
       continue;
     }



More information about the Bf-blender-cvs mailing list