PeriDyno 1.0.0
Loading...
Searching...
No Matches
UniformGridRenderer.cpp
Go to the documentation of this file.
2
3#include "VkTransfer.h"
4#include "Node.h"
5#include "Topology/Shape.h"
6
7namespace dyno
8{
13
17
18 std::vector<px::Box> hBox;
20 {
21 auto uGrid = std::dynamic_pointer_cast<UniformGrid3D>(this->inTopology()->getDataPtr());
22 if (uGrid == nullptr)
23 return false;
24
25 dyno::Vec3f uo = uGrid->orgin();
26
27 px::Box b;
28 b.halfLength = dyno::Vec3f(0.5*uGrid->spacing());
29 for (int k = 0; k < uGrid->nz(); k++)
30 {
31 for (int j = 0; j < uGrid->ny(); j++)
32 {
33 for (int i = 0; i < uGrid->nx(); i++)
34 {
35 b.center = dyno::Vec3f(uo.x, uo.y, uo.z) + uGrid->spacing() * dyno::Vec3f(i, j, k);
36 hBox.push_back(b);
37 }
38 }
39 }
40
41 mBoxes.resize(hBox.size());
43// mBoxes.resize(uGrid->totalGridSize());
44// auto& boxes = eleSet->getBoxes();
45// auto& spheres = eleSet->getSpheres();
46// auto& capsules = eleSet->getCapsules();
47//
49
50 // Initialize mechanical states
51 this->addKernel(
52 "SetupBox",
53 std::make_shared<VkProgram>(
54 BUFFER(px::Box), //boxes for rendering
55 BUFFER3D(float), //density
56 UNIFORM(GridInfo), //grid info
57 CONSTANT(uint32_t)) //number of total grid cells
58 );
59 kernel("SetupBox")->load(getAssetPath() + "shaders/glsl/phasefield/SetupBox.comp.spv");
60
61 return true;
62 }
63
65 {
66 auto uGrid = std::dynamic_pointer_cast<UniformGrid3D>(this->inTopology()->getDataPtr());
67 assert(uGrid != nullptr);
68
69 VkUniform<GridInfo> gridInfo;
70 VkConstant<uint32_t> gridSize;
71 gridInfo.setValue(uGrid->getGridInfo());
72 gridSize.setValue(uGrid->totalGridSize());
73 kernel("SetupBox")->flush(
74 vkDispatchSize3D(uGrid->nx(), uGrid->ny(), uGrid->nz(), 8),
75 &mBoxes,
77 &gridInfo,
78 &gridSize);
79
80// auto& boxes = eleSet->getBoxes();
81 if (mBoxes.size() > 0) {
83 }
84 }
85
87 {
88 int vertSize = sizeof(CUBE_VERTICES) / sizeof(Vertex);
89 int indexSize = sizeof(CUBE_INDICES) / sizeof(uint32_t);
90 std::vector<Vertex> vertices;
91 vertices.resize(vertSize);
92 memcpy(vertices.data(), CUBE_VERTICES, sizeof(CUBE_VERTICES));
93 std::vector<uint32_t> indices;
94 indices.resize(indexSize);
95 memcpy(indices.data(), CUBE_INDICES, sizeof(CUBE_INDICES));
96
97 mCubeVertex.resize(vertSize, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
98 vkTransfer(mCubeVertex, vertices);
99 mCubeIndex.resize(indexSize, VK_BUFFER_USAGE_INDEX_BUFFER_BIT);
100 vkTransfer(mCubeIndex, indices);
101 mCubeInstanceData.resize(boxes.size(), VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
102 }
103}
static const float CUBE_VERTICES[]
position xyz, unused w, normal, uv
Definition Shape.h:6
static const int CUBE_INDICES[]
Definition Shape.h:231
#define UNIFORM(T)
Definition VkProgram.h:99
#define BUFFER3D(T)
Definition VkProgram.h:98
#define BUFFER(T)
Definition VkProgram.h:96
#define CONSTANT(T)
Definition VkProgram.h:100
assert(queueCount >=1)
VkDeviceArray3D< float > * mDensity
void initBoxes(VkDeviceArray< px::Box > &boxex)
VkDeviceArray< px::Box > mBoxes
void setValue(const T val)
uint32_t size() const
VkDeviceArray< Vertex > mCubeVertex
VkDeviceArray< px::Box > mCubeInstanceData
VkDeviceArray< uint32_t > mCubeIndex
void setValue(T val)
Definition VkUniform.inl:32
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
Vector< float, 3 > Vec3f
Definition Vector3D.h:93
std::vector< px::Box > hBox
bool vkTransfer(VkHostArray< T > &dst, const VkDeviceArray< T > &src)
Definition VkTransfer.inl:7
static dim3 vkDispatchSize3D(uint size_x, uint size_y, uint size_z, uint blockSize)
Definition VkProgram.h:51
dyno::Vec3f halfLength
Definition Primitive3D.h:42
dyno::Vec3f center
Definition Primitive3D.h:41