[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