[Bf-blender-cvs] [a29da3be76d] functions: remove outdated simulation code
Jacques Lucke
noreply at git.blender.org
Thu Jun 20 15:51:33 CEST 2019
Commit: a29da3be76d3120af17479afe8febdc7d30e7b2a
Author: Jacques Lucke
Date: Thu Jun 20 15:17:23 2019 +0200
Branches: functions
https://developer.blender.org/rBa29da3be76d3120af17479afe8febdc7d30e7b2a
remove outdated simulation code
===================================================================
D source/blender/simulations/bparticles/playground_solver.cpp
===================================================================
diff --git a/source/blender/simulations/bparticles/playground_solver.cpp b/source/blender/simulations/bparticles/playground_solver.cpp
deleted file mode 100644
index 7c341b1963d..00000000000
--- a/source/blender/simulations/bparticles/playground_solver.cpp
+++ /dev/null
@@ -1,490 +0,0 @@
-#include "BLI_small_vector.hpp"
-#include "BLI_task.h"
-
-#include "particles_container.hpp"
-#include "playground_solver.hpp"
-
-namespace BParticles {
-
-class MoveAction : public BParticles::Action {
- private:
- float3 m_offset;
-
- public:
- MoveAction(float3 offset) : m_offset(offset)
- {
- }
-
- void execute(AttributeArrays attributes, ArrayRef<uint> indices_mask) override
- {
- auto positions = attributes.get_float3("Position");
-
- for (uint pindex : indices_mask) {
- positions[pindex] += m_offset;
- }
- }
-};
-
-class HitPlaneEvent : public Event {
- private:
- float m_value;
-
- public:
- HitPlaneEvent(float value) : m_value(value)
- {
- }
-
- void filter(AttributeArrays attributes,
- ArrayRef<uint> indices_mask,
- ArrayRef<float3> next_movement,
- SmallVector<uint> &r_filtered_indices,
- SmallVector<float> &r_time_factors) override
- {
- auto positions = attributes.get_float3("Position");
-
- for (uint i = 0; i < indices_mask.size(); i++) {
- uint pindex = indices_mask[i];
-
- if (positions[pindex].y < m_value && positions[pindex].y + next_movement[i].y >= m_value) {
- float time_factor = (m_value - positions[pindex].y) / next_movement[i].y;
- r_filtered_indices.append(i);
- r_time_factors.append(time_factor);
- }
- }
- }
-};
-
-class SimpleSolver : public Solver {
-
- struct MyState : StateBase {
- ParticlesContainer *particles;
- float seconds_since_start = 0.0f;
-
- ~MyState()
- {
- delete particles;
- }
- };
-
- static const uint m_block_size = 1000;
- Description &m_description;
- AttributesInfo m_attributes;
-
- struct EventWithAction {
- Event *event;
- Action *action;
- };
-
- SmallVector<EventWithAction> m_events;
-
- public:
- SimpleSolver(Description &description) : m_description(description)
- {
- SmallSetVector<std::string> byte_attributes = {"Kill State"};
- SmallSetVector<std::string> float_attributes = {"Birth Time"};
- SmallSetVector<std::string> float3_attributes = {"Position", "Velocity"};
-
- m_attributes = AttributesInfo(
- byte_attributes.values(), float_attributes.values(), float3_attributes.values());
-
- m_events.append({new HitPlaneEvent(1.0f), new MoveAction({0, 2, 0})});
- m_events.append({new HitPlaneEvent(5.0f), new MoveAction({0, 2, -2})});
- }
-
- StateBase *init() override
- {
- MyState *state = new MyState();
- state->particles = new ParticlesContainer(m_attributes, m_block_size);
- return state;
- }
-
- void step(WrappedState &wrapped_state, float elapsed_seconds) override
- {
- MyState &state = wrapped_state.state<MyState>();
- state.seconds_since_start += elapsed_seconds;
-
- ParticlesContainer &particles = *state.particles;
-
- SmallVector<ParticlesBlock *> already_existing_blocks =
- particles.active_blocks().to_small_vector();
-
- this->step_blocks(state, already_existing_blocks, elapsed_seconds);
- this->delete_dead_particles(already_existing_blocks);
- this->emit_new_particles(state, elapsed_seconds);
- this->compress_all_blocks(particles);
-
- std::cout << "Particle Amount: " << this->particle_amount(wrapped_state) << "\n";
- std::cout << "Block amount: " << particles.active_blocks().size() << "\n";
- }
-
- struct StepBlocksParallelData {
- SimpleSolver *solver;
- MyState &state;
- ArrayRef<ParticlesBlock *> blocks;
- ArrayRef<uint> full_indices_mask;
- ArrayRef<float> full_time_diffs;
- };
-
- BLI_NOINLINE void step_blocks(MyState &state,
- ArrayRef<ParticlesBlock *> blocks,
- float elapsed_seconds)
- {
- ParallelRangeSettings settings;
- BLI_parallel_range_settings_defaults(&settings);
- settings.use_threading = false;
-
- SmallVector<uint> full_indices_mask = Range<uint>(0, m_block_size).to_small_vector();
- SmallVector<float> full_time_diffs(m_block_size);
- full_time_diffs.fill(elapsed_seconds);
-
- StepBlocksParallelData data = {this, state, blocks, full_indices_mask, full_time_diffs};
-
- BLI_task_parallel_range(0, blocks.size(), (void *)&data, step_block_cb, &settings);
- }
-
- static void step_block_cb(void *__restrict userdata,
- const int index,
- const ParallelRangeTLS *__restrict UNUSED(tls))
- {
- StepBlocksParallelData *data = (StepBlocksParallelData *)userdata;
- ParticlesBlock *block = data->blocks[index];
- AttributeArrays attributes = block->slice_active();
-
- ArrayRef<uint> indices_mask = data->full_indices_mask.take_front(attributes.size());
- ArrayRef<float> time_diffs = data->full_time_diffs.take_front(attributes.size());
-
- data->solver->step_slice(data->state, attributes, indices_mask, time_diffs);
- }
-
- BLI_NOINLINE void step_slice(MyState &state,
- AttributeArrays attributes,
- ArrayRef<uint> indices_mask,
- ArrayRef<float> time_diffs)
- {
- SmallVector<uint> unfinished_mask;
- SmallVector<float> unfinished_time_diffs;
- this->step_slice_to_next_event(
- state, attributes, indices_mask, time_diffs, unfinished_mask, unfinished_time_diffs);
- BLI_assert(unfinished_mask.size() == unfinished_time_diffs.size());
-
- if (unfinished_mask.size() > 0) {
- this->step_slice_ignoring_events(attributes, unfinished_mask, unfinished_time_diffs);
- }
-
- /* Temporary Kill Code */
- this->tag_old_particles_for_deletion(state, attributes, indices_mask);
- }
-
- struct EventIndexAtTime {
- int index = -1;
- float time_factor = 2.0f; /* Just has to be > 1.0f. */
- };
-
- BLI_NOINLINE void step_slice_to_next_event(MyState &UNUSED(state),
- AttributeArrays attributes,
- ArrayRef<uint> indices_mask,
- ArrayRef<float> time_diffs,
- SmallVector<uint> &r_unfinished_mask,
- SmallVector<float> &r_unfinished_time_diffs)
- {
- SmallVector<float3> position_offsets(indices_mask.size());
- SmallVector<float3> velocity_offsets(indices_mask.size());
-
- this->integrate_particles(
- attributes, indices_mask, time_diffs, position_offsets, velocity_offsets);
-
- SmallVector<EventIndexAtTime> first_event_per_particle(indices_mask.size());
- this->find_next_events(attributes, indices_mask, position_offsets, first_event_per_particle);
- this->forward_particles_to_next_event(
- attributes, indices_mask, first_event_per_particle, position_offsets, velocity_offsets);
-
- SmallVector<SmallVector<uint>> particles_per_event(m_events.size());
- this->find_particles_per_event(indices_mask, first_event_per_particle, particles_per_event);
- this->run_actions(attributes, particles_per_event);
-
- this->find_unfinished_particles(indices_mask,
- first_event_per_particle,
- time_diffs,
- r_unfinished_mask,
- r_unfinished_time_diffs);
- }
-
- BLI_NOINLINE void find_next_events(AttributeArrays attributes,
- ArrayRef<uint> indices_mask,
- ArrayRef<float3> position_offsets,
- ArrayRef<EventIndexAtTime> r_first_event_per_particle)
- {
- for (uint event_index = 0; event_index < m_events.size(); event_index++) {
- SmallVector<uint> triggered_indices;
- SmallVector<float> triggered_time_factors;
- m_events[event_index].event->filter(
- attributes, indices_mask, position_offsets, triggered_indices, triggered_time_factors);
-
- for (uint i = 0; i < triggered_indices.size(); i++) {
- uint index = triggered_indices[i];
- if (triggered_time_factors[i] < r_first_event_per_particle[index].time_factor) {
- r_first_event_per_particle[index].index = event_index;
- r_first_event_per_particle[index].time_factor = triggered_time_factors[i];
- }
- }
- }
- }
-
- BLI_NOINLINE void forward_particles_to_next_event(
- AttributeArrays attributes,
- ArrayRef<uint> indices_mask,
- ArrayRef<EventIndexAtTime> first_event_per_particle,
- ArrayRef<float3> position_offsets,
- ArrayRef<float3> velocity_offsets)
- {
- auto positions = attributes.get_float3("Position");
- auto velocities = attributes.get_float3("Velocity");
-
- for (uint i = 0; i < indices_mask.size(); i++) {
- uint pindex = indices_mask[i];
- int event_index = first_event_per_particle[i].index;
- if (event_index == -1) {
- /* Particle has no event. */
- positions[pindex] += position_offsets[i];
- velocities[pindex] += velocity_offsets[i];
- }
- else {
- /* Particle has an event. */
- float time_factor = first_event_per_particle[i].time_factor;
- BLI_assert(time_factor >= 0.0f && time_factor <= 1.0f);
-
- positions[pindex] += time_factor * position_offsets[i];
- velocities[pindex] += time_factor * velocity_offsets[i];
- }
- }
- }
-
- BLI_NOINLINE void find_particles_per_event(ArrayRef<uint> indices_mask,
- ArrayRef<EventIndexAtTime> first_event_per_particle,
- ArrayRef<SmallVector<uint>> r_particles_per_event)
- {
- for (uint i = 0; i < indices_mask.size(); i++) {
- uint pindex = indices_mask[i];
- int event_index = first_event_per_particle[i].index;
- if (event_index != -1) {
- r_particles_per_event[event_index].append(pindex);
-
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list