[Bf-blender-cvs] [c74934cbf92] functions: remove abstractions that are wrong for now

Jacques Lucke noreply at git.blender.org
Thu Jun 20 15:50:59 CEST 2019


Commit: c74934cbf92b777c396f704a03508a8c7da21938
Author: Jacques Lucke
Date:   Thu Jun 20 10:17:09 2019 +0200
Branches: functions
https://developer.blender.org/rBc74934cbf92b777c396f704a03508a8c7da21938

remove abstractions that are wrong for now

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

M	source/blender/simulations/bparticles/c_wrapper.cpp
M	source/blender/simulations/bparticles/core.cpp
M	source/blender/simulations/bparticles/core.hpp
M	source/blender/simulations/bparticles/emitters.cpp
M	source/blender/simulations/bparticles/playground_solver.cpp

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

diff --git a/source/blender/simulations/bparticles/c_wrapper.cpp b/source/blender/simulations/bparticles/c_wrapper.cpp
index 1df8dd8c89b..238961a7c18 100644
--- a/source/blender/simulations/bparticles/c_wrapper.cpp
+++ b/source/blender/simulations/bparticles/c_wrapper.cpp
@@ -28,7 +28,6 @@ using BParticles::AttributeType;
 using BParticles::Description;
 using BParticles::Emitter;
 using BParticles::EmitterHelper;
-using BParticles::EmitterInfoBuilder;
 using BParticles::EmitterTarget;
 using BParticles::ParticlesBlock;
 using BParticles::Solver;
diff --git a/source/blender/simulations/bparticles/core.cpp b/source/blender/simulations/bparticles/core.cpp
index 9acd6cae267..a70a809a241 100644
--- a/source/blender/simulations/bparticles/core.cpp
+++ b/source/blender/simulations/bparticles/core.cpp
@@ -32,7 +32,7 @@ Action::~Action()
 {
 }
 
-PositionalEvent::~PositionalEvent()
+Event::~Event()
 {
 }
 
diff --git a/source/blender/simulations/bparticles/core.hpp b/source/blender/simulations/bparticles/core.hpp
index 4786f4947bf..87d37b1f9aa 100644
--- a/source/blender/simulations/bparticles/core.hpp
+++ b/source/blender/simulations/bparticles/core.hpp
@@ -18,8 +18,6 @@ class Solver;
 class WrappedState;
 class StateBase;
 class Emitter;
-class EmitterInfo;
-class EmitterInfoBuilder;
 
 using BLI::ArrayRef;
 using BLI::float3;
@@ -37,16 +35,9 @@ class Force {
                          ArrayRef<float3> dst) = 0;
 };
 
-class Action {
- public:
-  virtual ~Action();
-
-  virtual void execute(AttributeArrays attributes, ArrayRef<uint> indices_mask) = 0;
-};
-
-class PositionalEvent {
+class Event {
  public:
-  virtual ~PositionalEvent();
+  virtual ~Event();
 
   virtual void filter(AttributeArrays attributes,
                       ArrayRef<uint> indices_mask,
@@ -55,94 +46,11 @@ class PositionalEvent {
                       SmallVector<float> &r_time_factors) = 0;
 };
 
-class EmitterInfo {
- private:
-  EmitterInfo()
-  {
-  }
-
-  Emitter *m_emitter;
-  SmallSetVector<std::string> m_used_float_attributes;
-  SmallSetVector<std::string> m_used_float3_attributes;
-  SmallSetVector<std::string> m_used_byte_attributes;
-
-  friend EmitterInfoBuilder;
-
- public:
-  Emitter &emitter()
-  {
-    return *m_emitter;
-  }
-
-  ArrayRef<std::string> used_float_attributes()
-  {
-    return m_used_float_attributes.values();
-  }
-
-  ArrayRef<std::string> used_float3_attributes()
-  {
-    return m_used_float3_attributes.values();
-  }
-
-  ArrayRef<std::string> used_byte_attributes()
-  {
-    return m_used_byte_attributes.values();
-  }
-
-  bool uses_float_attribute(StringRef name)
-  {
-    return m_used_float_attributes.contains(name.to_std_string());
-  }
-
-  bool uses_float3_attribute(StringRef name)
-  {
-    return m_used_float3_attributes.contains(name.to_std_string());
-  }
-
-  bool uses_byte_attribute(StringRef name)
-  {
-    return m_used_byte_attributes.contains(name.to_std_string());
-  }
-};
-
-class EmitterInfoBuilder {
- private:
-  Emitter *m_emitter;
-  SmallSetVector<std::string> m_used_byte_attributes;
-  SmallSetVector<std::string> m_used_float_attributes;
-  SmallSetVector<std::string> m_used_float3_attributes;
-
+class Action {
  public:
-  EmitterInfoBuilder(Emitter *emitter) : m_emitter(emitter)
-  {
-  }
-
-  void inits_attribute(StringRef name, AttributeType type)
-  {
-    switch (type) {
-      case AttributeType::Byte:
-        m_used_byte_attributes.add(name.to_std_string());
-        break;
-      case AttributeType::Float:
-        m_used_float_attributes.add(name.to_std_string());
-        break;
-      case AttributeType::Float3:
-        m_used_float3_attributes.add(name.to_std_string());
-        break;
-      default:
-        BLI_assert(false);
-    }
-  }
+  virtual ~Action();
 
-  EmitterInfo build()
-  {
-    EmitterInfo info;
-    info.m_emitter = m_emitter;
-    info.m_used_byte_attributes = m_used_byte_attributes;
-    info.m_used_float_attributes = m_used_float_attributes;
-    info.m_used_float3_attributes = m_used_float3_attributes;
-    return info;
-  }
+  virtual void execute(AttributeArrays attributes, ArrayRef<uint> indices_mask) = 0;
 };
 
 class EmitterTarget {
@@ -219,7 +127,6 @@ class Emitter {
  public:
   virtual ~Emitter();
 
-  virtual void info(EmitterInfoBuilder &info) const = 0;
   virtual void emit(EmitterHelper helper) = 0;
 };
 
diff --git a/source/blender/simulations/bparticles/emitters.cpp b/source/blender/simulations/bparticles/emitters.cpp
index 1c64f6f90a6..94a6beb1469 100644
--- a/source/blender/simulations/bparticles/emitters.cpp
+++ b/source/blender/simulations/bparticles/emitters.cpp
@@ -20,12 +20,6 @@ class PointEmitter : public Emitter {
   {
   }
 
-  void info(EmitterInfoBuilder &builder) const override
-  {
-    builder.inits_attribute("Position", AttributeType::Float3);
-    builder.inits_attribute("Velocity", AttributeType::Float3);
-  }
-
   void emit(EmitterHelper helper) override
   {
     auto &target = helper.request_raw();
@@ -49,12 +43,6 @@ class SurfaceEmitter : public Emitter {
   {
   }
 
-  void info(EmitterInfoBuilder &builder) const override
-  {
-    builder.inits_attribute("Position", AttributeType::Float3);
-    builder.inits_attribute("Velocity", AttributeType::Float3);
-  }
-
   void emit(EmitterHelper helper) override
   {
     MLoop *loops = m_mesh->mloop;
@@ -96,12 +84,6 @@ class PathEmitter : public Emitter {
   {
   }
 
-  void info(EmitterInfoBuilder &builder) const override
-  {
-    builder.inits_attribute("Position", AttributeType::Float3);
-    builder.inits_attribute("Velocity", AttributeType::Float3);
-  }
-
   void emit(EmitterHelper helper) override
   {
     SmallVector<float3> positions;
@@ -109,7 +91,7 @@ class PathEmitter : public Emitter {
       float3 pos1 = m_path.data[i].vec;
       float3 pos2 = m_path.data[i + 1].vec;
 
-      for (uint j = 0; j < 100; j++) {
+      for (uint j = 0; j < 10; j++) {
         float factor = (float)j / 100.0f;
         float3 pos = pos1 * (1.0f - factor) + pos2 * factor;
         pos = m_transform.transform_position(pos);
diff --git a/source/blender/simulations/bparticles/playground_solver.cpp b/source/blender/simulations/bparticles/playground_solver.cpp
index eb1ecb7683a..7c341b1963d 100644
--- a/source/blender/simulations/bparticles/playground_solver.cpp
+++ b/source/blender/simulations/bparticles/playground_solver.cpp
@@ -25,7 +25,7 @@ class MoveAction : public BParticles::Action {
   }
 };
 
-class HitPlaneEvent : public PositionalEvent {
+class HitPlaneEvent : public Event {
  private:
   float m_value;
 
@@ -69,10 +69,9 @@ class SimpleSolver : public Solver {
   static const uint m_block_size = 1000;
   Description &m_description;
   AttributesInfo m_attributes;
-  SmallVector<EmitterInfo> m_emitter_infos;
 
   struct EventWithAction {
-    PositionalEvent *event;
+    Event *event;
     Action *action;
   };
 
@@ -81,21 +80,9 @@ class SimpleSolver : public Solver {
  public:
   SimpleSolver(Description &description) : m_description(description)
   {
-    for (Emitter *emitter : m_description.emitters()) {
-      EmitterInfoBuilder builder{emitter};
-      emitter->info(builder);
-      m_emitter_infos.append(builder.build());
-    }
-
     SmallSetVector<std::string> byte_attributes = {"Kill State"};
     SmallSetVector<std::string> float_attributes = {"Birth Time"};
-    SmallSetVector<std::string> float3_attributes;
-
-    for (EmitterInfo &emitter : m_emitter_infos) {
-      byte_attributes.add_multiple(emitter.used_byte_attributes());
-      float_attributes.add_multiple(emitter.used_float_attributes());
-      float3_attributes.add_multiple(emitter.used_float3_attributes());
-    }
+    SmallSetVector<std::string> float3_attributes = {"Position", "Velocity"};
 
     m_attributes = AttributesInfo(
         byte_attributes.values(), float_attributes.values(), float3_attributes.values());
@@ -409,12 +396,12 @@ class SimpleSolver : public Solver {
 
   BLI_NOINLINE void emit_new_particles(MyState &state, float elapsed_seconds)
   {
-    for (EmitterInfo &emitter : m_emitter_infos) {
+    for (Emitter *emitter : m_description.emitters()) {
       this->emit_from_emitter(state, emitter, elapsed_seconds);
     }
   }
 
-  void emit_from_emitter(MyState &state, EmitterInfo &emitter, float elapsed_seconds)
+  void emit_from_emitter(MyState &state, Emitter *emitter, float elapsed_seconds)
   {
     SmallVector<EmitterTarget> targets;
     SmallVector<ParticlesBlock *> blocks;
@@ -426,28 +413,14 @@ class SimpleSolver : public Solver {
       return targets.last();
     };
 
-    emitter.emitter().emit(EmitterHelper{request_target});
+    emitter->emit(EmitterHelper{request_target});
 
     for (uint i = 0; i < targets.size(); i++) {
       EmitterTarget &target = targets[i];
       ParticlesBlock *block = blocks[i];
       AttributeArrays emitted_data = target.attributes().take_front(target.emitted_amount());
 
-      for (uint i : m_attributes.byte_attributes()) {
-        if (!emitter.uses_byte_attribute(m_attributes.name_of(i))) {
-          emitted_data.get_byte(i).fill(0);
-        }
-      }
-      for (uint i : m_attributes.float_attributes()) {
-        if (!emitter.uses_float_attribute(m_attributes.name_of(i))) {
-          emitted_data.get_float(i).fill(0);
-        }
-      }
-      for (uint i : m_attributes.float3_attributes()) {
-        if (!emitter.uses_float3_attribute(m_attributes.name_of(i))) {
-          emitted_data.get_float3(i).fill({0, 0, 0});
-        }
-      }
+      emitted_data.get_byte("Kill State").fill(0);
 
       auto birth_times = emitted_data.get_float("Birth Time");
       for (float &birth_time : birth_times) {



More information about the Bf-blender-cvs mailing list