PeriDyno 1.0.0
Loading...
Searching...
No Matches
DiscreteElementRenderer.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
19 {
20 Node* pNode = getParentNode();
21 assert(pNode != nullptr);
22
23 auto eleSet = std::dynamic_pointer_cast<DiscreteElements>(this->inTopology()->getDataPtr());
24 if (eleSet == nullptr)
25 return false;
26
27 auto& boxes = eleSet->getBoxes();
28 auto& spheres = eleSet->getSpheres();
29 auto& capsules = eleSet->getCapsules();
30
31 initBoxes(boxes);
32 initSpheres(spheres);
33 initCapsules(capsules);
34
35 return true;
36 }
37
39 {
40 auto eleSet = std::dynamic_pointer_cast<DiscreteElements>(this->inTopology()->getDataPtr());
41 assert(eleSet != nullptr);
42
43 auto& boxes = eleSet->getBoxes();
44 if (boxes.size() > 0) {
46 }
47
48 auto& spheres = eleSet->getSpheres();
49 if (spheres.size() > 0) {
51 }
52
53 auto& capsules = eleSet->getCapsules();
54 if (capsules.size() > 0) {
56 }
57 }
58
60 {
61 int vertSize = sizeof(CUBE_VERTICES) / sizeof(Vertex);
62 int indexSize = sizeof(CUBE_INDICES) / sizeof(uint32_t);
63 std::vector<Vertex> vertices;
64 vertices.resize(vertSize);
65 memcpy(vertices.data(), CUBE_VERTICES, sizeof(CUBE_VERTICES));
66 std::vector<uint32_t> indices;
67 indices.resize(indexSize);
68 memcpy(indices.data(), CUBE_INDICES, sizeof(CUBE_INDICES));
69
70 mCubeVertex.resize(vertSize, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
71 vkTransfer(mCubeVertex, vertices);
72 mCubeIndex.resize(indexSize, VK_BUFFER_USAGE_INDEX_BUFFER_BIT);
73 vkTransfer(mCubeIndex, indices);
74 mCubeInstanceData.resize(boxes.size(), VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
75 }
76
78 {
79 int vertSize = sizeof(SPHERE_VERTICES) / sizeof(Vertex);
80 int indexSize = sizeof(SPHERE_INDICES) / sizeof(uint32_t);
81 std::vector<Vertex> vertices;
82 vertices.resize(vertSize);
83 memcpy(vertices.data(), SPHERE_VERTICES, sizeof(SPHERE_VERTICES));
84 std::vector<uint32_t> indices;
85 indices.resize(indexSize);
86 memcpy(indices.data(), SPHERE_INDICES, sizeof(SPHERE_INDICES));
87
88 mSphereVertex.resize(vertSize, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
89 vkTransfer(mSphereVertex, vertices);
90 mSphereIndex.resize(indexSize, VK_BUFFER_USAGE_INDEX_BUFFER_BIT);
91 vkTransfer(mSphereIndex, indices);
92 mSphereInstanceData.resize(spheres.size(), VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
93 }
94
96 {
97 int vertSize = sizeof(SPHERE_VERTICES) / sizeof(Vertex);
98 int indexSize = sizeof(SPHERE_INDICES) / sizeof(uint32_t);
99 std::vector<Vertex> vertices;
100 vertices.resize(vertSize);
101 memcpy(vertices.data(), SPHERE_VERTICES, sizeof(SPHERE_VERTICES));
102 std::vector<uint32_t> indices;
103 indices.resize(indexSize);
104 memcpy(indices.data(), SPHERE_INDICES, sizeof(SPHERE_INDICES));
105
106 mCapsuleVertex.resize(vertSize, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
107 vkTransfer(mCapsuleVertex, vertices);
108 mCapsuleIndex.resize(indexSize, VK_BUFFER_USAGE_INDEX_BUFFER_BIT);
109 vkTransfer(mCapsuleIndex, indices);
110 mCapsuleInstanceData.resize(capsules.size(), VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
111 }
112}
static const int SPHERE_INDICES[]
Definition Shape.h:2403
static const float SPHERE_VERTICES[]
Definition Shape.h:240
static const float CUBE_VERTICES[]
position xyz, unused w, normal, uv
Definition Shape.h:6
static const int CUBE_INDICES[]
Definition Shape.h:231
assert(queueCount >=1)
void initBoxes(VkDeviceArray< px::Box > &boxex)
void initSpheres(VkDeviceArray< px::Sphere > &spheres)
void initCapsules(VkDeviceArray< px::Capsule > &capsules)
Node * getParentNode()
Definition Module.cpp:203
uint32_t size() const
VkDeviceArray< Vertex > mSphereVertex
VkDeviceArray< uint32_t > mCapsuleIndex
VkDeviceArray< uint32_t > mSphereIndex
VkDeviceArray< Vertex > mCubeVertex
VkDeviceArray< px::Sphere > mSphereInstanceData
VkDeviceArray< px::Capsule > mCapsuleInstanceData
VkDeviceArray< px::Box > mCubeInstanceData
VkDeviceArray< uint32_t > mCubeIndex
VkDeviceArray< Vertex > mCapsuleVertex
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
bool vkTransfer(VkHostArray< T > &dst, const VkDeviceArray< T > &src)
Definition VkTransfer.inl:7