PeriDyno 1.0.0
Loading...
Searching...
No Matches
QuadSetToTriangleSet.cu
Go to the documentation of this file.
1#include "QuadSetToTriangleSet.h"
2
3namespace dyno
4{
5 IMPLEMENT_TCLASS(QuadSetToTriangleSet, TDataType)
6
7 template<typename TDataType>
8 QuadSetToTriangleSet<TDataType>::QuadSetToTriangleSet()
9 : TopologyMapping()
10 {
11 }
12
13 template<typename Triangle, typename Quad>
14 __global__ void Q2T_SetupTriangles(
15 DArray<Triangle> triangles,
16 DArray<Quad> quads)
17 {
18 int tId = threadIdx.x + (blockIdx.x * blockDim.x);
19 if (tId >= quads.size()) return;
20
21 Quad quad = quads[tId];
22 triangles[2 * tId] = Triangle(quad[0], quad[1], quad[2]);
23 triangles[2 * tId + 1] = Triangle(quad[0], quad[2], quad[3]);
24 }
25
26 template<typename TDataType>
27 bool QuadSetToTriangleSet<TDataType>::apply()
28 {
29 if (this->outTriangleSet()->isEmpty()) {
30 this->outTriangleSet()->allocate();
31 }
32
33 auto qs = this->inQuadSet()->constDataPtr();
34 auto ts = this->outTriangleSet()->getDataPtr();
35
36 auto& verts = qs->getPoints();
37 auto& quads = qs->getQuads();
38
39 auto& tris = ts->getTriangles();
40 tris.resize(2 * quads.size());
41
42 ts->setPoints(verts);
43
44 cuExecute(quads.size(),
45 Q2T_SetupTriangles,
46 tris,
47 quads);
48
49 this->outTriangleSet()->update();
50
51 return true;
52 }
53
54 DEFINE_CLASS(QuadSetToTriangleSet);
55}