-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest.cpp
96 lines (82 loc) · 2.41 KB
/
test.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//-----------------------------------------------------------
// Copyright (C) 2021 Piotr (Peter) Beben <pdbcas2@gmail.com>
// See LICENSE included with this distribution.
#include "stdafx.h"
#include "test.hpp"
#include "mesh_smooth.cuh"
#include <array>
#include <vector>
void testfunction()
{
int nSweeps = 40;
size_t nverts = 1500000;
size_t nidxs = nverts;
size_t nadj;
unsigned int nthreadsPerBlock = 128;
float *vertsx = new float[nverts];
float *vertsy = new float[nverts];
float *vertsz = new float[nverts];
float* normsx = new float[nverts];
float* normsy = new float[nverts];
float* normsz = new float[nverts];
for (size_t i = 0; i < nidxs; ++i) {
vertsx[i] = float(rand())/float(RAND_MAX);
vertsy[i] = float(rand())/float(RAND_MAX);
vertsz[i] = float(rand())/float(RAND_MAX);
normsx[i] = 1.0f;
normsy[i] = 0.0f;
normsz[i] = 0.0f;
}
size_t *vertidxs = new size_t[nidxs];
for(size_t i=0; i < nidxs; ++i) vertidxs[i] = i;
size_t *vertadjOffsets = new size_t[nidxs+1];
size_t offset = 0;
for (size_t i = 0; i < nidxs; ++i) {
size_t count = 3 + rand() % 8;
// size_t count = 3 + rand() % 55;
// size_t count = (i % 2 == 0 ? 3 : 50);
// size_t count = (i < nidxs/2 ? 3 : 50);
vertadjOffsets[i] = offset;
offset += count;
}
vertadjOffsets[nidxs] = offset;
nadj = offset;
size_t *vertadj = new size_t[nadj];
for (size_t i = 0; i < nidxs; ++i) {
size_t offset = vertadjOffsets[i];
size_t offsetNxt = vertadjOffsets[i+1];
for (size_t j = offset; j < offsetNxt; ++j) {
// vertadj[j] = rand() % nverts;
vertadj[j] = (i + 20 - rand() % 40) % nverts;
// vertadj[j] = (i + 10 - rand() % 20) % nverts;
// vertadj[j] = (i + rand() % count) % nverts;
// vertadj[j] = (i + j -1) % nidxs;
// vertadj[j] = (i + 1) % nidxs;
// vertadj[j] = 0;
}
}
for (int i = 0; i < 10; ++i) { //***
std::cout << vertsx[i] << " ";
std::cout << vertsy[i] << " ";
std::cout << vertsz[i] << " ";
}
bool success;
cuda_mesh_smooth(
nSweeps, nverts, nidxs, nadj, nthreadsPerBlock, true,
vertidxs, vertadj, vertadjOffsets,
vertsx, vertsy, vertsz, normsx, normsy, normsz, success);
for (int i = 0; i < 10; ++i) { //***
std::cout << vertsx[i] << " ";
std::cout << vertsy[i] << " ";
std::cout << vertsz[i] << " ";
}
delete[] vertsx;
delete[] vertsy;
delete[] vertsz;
delete[] normsx;
delete[] normsy;
delete[] normsz;
delete[] vertidxs;
delete[] vertadj;
delete[] vertadjOffsets;
}