PeriDyno 1.0.0
Loading...
Searching...
No Matches
ParticleIntegrator.cpp
Go to the documentation of this file.
2
3namespace dyno
4{
6
7
9 {
10 float gravity;
11 float dt;
12 };
13
15 : Module()
16 {
17 this->addKernel(
18 "ParticleIntegrator",
19 std::make_shared<VkProgram>(
20 BUFFER(Vec3f), // inout: position
21 BUFFER(Vec3f), // inout: velocity
22 UNIFORM(FluidSolverParams), // in: array info
23 CONSTANT(uint) // in: particle number
24 )
25 );
26 kernel("ParticleIntegrator")->load(getAssetPath() + "shaders/glsl/particlesystem/ParticleIntegrator.comp.spv");
27 }
28
30 {
31 float dt = this->inTimeStep()->getValue();
32
33 auto& pos = this->inPosition()->getData();
34 auto& vel = this->inVelocity()->getData();
35
36 uint num = pos.size();
37
38 FluidSolverParams params;
39 params.dt = dt;
40 params.gravity = -9.8f;
41
43 uniform.setValue(params);
44
45 VkConstant<uint> constNum(pos.size());
46
47 kernel("ParticleIntegrator")->flush(
48 vkDispatchSize(num, 64),
49 pos.handle(),
50 vel.handle(),
51 &uniform,
52 &constNum);
53 }
54}
#define IMPLEMENT_CLASS(name)
Definition Object.h:79
#define UNIFORM(T)
Definition VkProgram.h:99
#define BUFFER(T)
Definition VkProgram.h:96
#define CONSTANT(T)
Definition VkProgram.h:100
Module(std::string name="default")
Definition Module.cpp:7
void setValue(T val)
Definition VkUniform.inl:32
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
static dim3 vkDispatchSize(uint totalSize, uint blockSize)
Definition VkProgram.h:34
Vector< float, 3 > Vec3f
Definition Vector3D.h:93
unsigned int uint
Definition VkProgram.h:14