[Bf-blender-cvs] [b0104641510] functions: simple point emitter
Jacques Lucke
noreply at git.blender.org
Mon Jun 17 15:52:41 CEST 2019
Commit: b01046415103b2d8195607ddda8fd6e77d09bacf
Author: Jacques Lucke
Date: Mon Jun 17 10:59:04 2019 +0200
Branches: functions
https://developer.blender.org/rBb01046415103b2d8195607ddda8fd6e77d09bacf
simple point emitter
===================================================================
M source/blender/simulations/CMakeLists.txt
M source/blender/simulations/bparticles/c_wrapper.cpp
M source/blender/simulations/bparticles/core.hpp
A source/blender/simulations/bparticles/emitter.cpp
A source/blender/simulations/bparticles/emitter.hpp
M source/blender/simulations/bparticles/particles_container.hpp
===================================================================
diff --git a/source/blender/simulations/CMakeLists.txt b/source/blender/simulations/CMakeLists.txt
index d7e5e1b1d26..5dd72a125fc 100644
--- a/source/blender/simulations/CMakeLists.txt
+++ b/source/blender/simulations/CMakeLists.txt
@@ -21,6 +21,8 @@ set(SRC
bparticles/particles_container.cpp
bparticles/playground_solver.hpp
bparticles/playground_solver.cpp
+ bparticles/emitter.hpp
+ bparticles/emitter.cpp
bparticles/c_wrapper.cpp
)
diff --git a/source/blender/simulations/bparticles/c_wrapper.cpp b/source/blender/simulations/bparticles/c_wrapper.cpp
index c15974b55c6..2efbb585040 100644
--- a/source/blender/simulations/bparticles/c_wrapper.cpp
+++ b/source/blender/simulations/bparticles/c_wrapper.cpp
@@ -2,6 +2,7 @@
#include "core.hpp"
#include "particles_container.hpp"
#include "playground_solver.hpp"
+#include "emitter.hpp"
#include "BLI_noise.h"
#define WRAPPERS(T1, T2) \
@@ -77,7 +78,7 @@ class TestEmitter : public BParticles::Emitter {
builder.inits_float3_attribute("Velocity");
}
- void emit(std::function<EmitterBuffers &()> request_buffers) override
+ void emit(BParticles::RequestEmitterBufferCB request_buffers) override
{
EmitterBuffers &dst = request_buffers();
BLI_assert(dst.size() > 0);
@@ -95,8 +96,10 @@ class TestEmitter : public BParticles::Emitter {
BParticlesDescription BParticles_playground_description(float control1, float control2)
{
+ auto emitter = BParticles::new_point_emitter({4, 4, 4});
+
Description *description = new Description(
- {new TestForce(control1), new TurbulenceForce(control2)}, {new TestEmitter()});
+ {new TestForce(control1), new TurbulenceForce(control2)}, {emitter.release()});
return wrap(description);
}
void BParticles_description_free(BParticlesDescription description_c)
diff --git a/source/blender/simulations/bparticles/core.hpp b/source/blender/simulations/bparticles/core.hpp
index d923140d19a..057090a2d9b 100644
--- a/source/blender/simulations/bparticles/core.hpp
+++ b/source/blender/simulations/bparticles/core.hpp
@@ -159,12 +159,14 @@ class EmitterInfoBuilder {
}
};
+using RequestEmitterBufferCB = std::function<EmitterBuffers &()>;
+
class Emitter {
public:
virtual ~Emitter();
virtual void info(EmitterInfoBuilder &info) const = 0;
- virtual void emit(std::function<EmitterBuffers &()> request_buffers) = 0;
+ virtual void emit(RequestEmitterBufferCB request_buffers) = 0;
};
class Description {
diff --git a/source/blender/simulations/bparticles/emitter.cpp b/source/blender/simulations/bparticles/emitter.cpp
new file mode 100644
index 00000000000..b9eef730d53
--- /dev/null
+++ b/source/blender/simulations/bparticles/emitter.cpp
@@ -0,0 +1,40 @@
+#include "emitter.hpp"
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
+
+namespace BParticles {
+
+class PointEmitter : public Emitter {
+ private:
+ float3 m_point;
+
+ public:
+ PointEmitter(float3 point) : m_point(point)
+ {
+ }
+
+ void info(EmitterInfoBuilder &builder) const override
+ {
+ builder.inits_float3_attribute("Position");
+ builder.inits_float3_attribute("Velocity");
+ }
+
+ void emit(RequestEmitterBufferCB request_buffers) override
+ {
+ auto &buffer = request_buffers();
+ auto positions = buffer.buffers().get_float3("Position");
+ auto velocities = buffer.buffers().get_float3("Velocity");
+
+ positions[0] = m_point;
+ velocities[0] = float3{-1, -1, 0};
+ buffer.set_initialized(1);
+ }
+};
+
+std::unique_ptr<Emitter> new_point_emitter(float3 point)
+{
+ Emitter *emitter = new PointEmitter(point);
+ return std::unique_ptr<Emitter>(emitter);
+}
+
+} // namespace BParticles
diff --git a/source/blender/simulations/bparticles/emitter.hpp b/source/blender/simulations/bparticles/emitter.hpp
new file mode 100644
index 00000000000..8496c905192
--- /dev/null
+++ b/source/blender/simulations/bparticles/emitter.hpp
@@ -0,0 +1,8 @@
+#pragma once
+
+#include "core.hpp"
+
+namespace BParticles {
+
+std::unique_ptr<Emitter> new_point_emitter(float3 point);
+}
diff --git a/source/blender/simulations/bparticles/particles_container.hpp b/source/blender/simulations/bparticles/particles_container.hpp
index 2f9e0668e84..bfddbecad00 100644
--- a/source/blender/simulations/bparticles/particles_container.hpp
+++ b/source/blender/simulations/bparticles/particles_container.hpp
@@ -257,6 +257,9 @@ inline void ParticlesBlock::move(uint old_index, uint new_index)
for (float3 *buffer : m_vec3_buffers) {
buffer[new_index] = buffer[old_index];
}
+ for (uint8_t *buffer : m_byte_buffers) {
+ buffer[new_index] = buffer[old_index];
+ }
}
/* Particles Block Slice
More information about the Bf-blender-cvs
mailing list