-
Notifications
You must be signed in to change notification settings - Fork 19
/
RTPS.cpp
149 lines (133 loc) · 3.83 KB
/
RTPS.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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include "GL/glew.h"
#include "RTPS.h"
#include "system/Simple.h"
#include "system/SPH.h"
#include "system/FLOCK.h"
#include "system/OUTER.h"
namespace rtps
{
RTPS::RTPS()
{
cli = new CL();
cl_managed = true;
//settings will be the default constructor
Init();
}
RTPS::RTPS(RTPSettings *s)
{
cli = new CL();
cl_managed = true;
settings = s;
Init();
printf("done with constructor\n");
}
RTPS::RTPS(RTPSettings *s, CL* _cli)
{
cli = _cli;
cl_managed = false;
settings = s;
Init();
}
RTPS::~RTPS()
{
printf("RTPS destructor\n");
delete system;
if(cl_managed)
{
delete cli;
}
//delete renderer;
}
void RTPS::Init()
{
//this should already be done, but in blender its not
//whats best way to check if stuff like glGenBuffers has been inited?
glewInit();
system = NULL;
//renderer = NULL;
printf("init: settings->system: %d\n", settings->system);
//TODO choose based on settings
//system = new Simple(this, settings->max_particles);
if (settings->system == RTPSettings::Simple)
{
printf("simple system\n");
system = new Simple(this, settings->max_particles);
}
else if (settings->system == RTPSettings::SPH)
{
printf("*** sph system 1 ***\n");
settings->setMaxOuterParticles(4096*4);
system = new SPH(this, settings->max_particles, settings->max_outer_particles);
printf("max: %d\n", settings->max_outer_particles);
}
else if (settings->system == RTPSettings::FLOCK)
{
printf("flock system\n");
system = new FLOCK(this, settings->max_particles);
}
else if (settings->system == RTPSettings::OUTER)
{
printf("*** outer system ***\n");
system_outer = new OUTER(this, settings->max_outer_particles);
printf("settings max particles: %d\n", settings->max_outer_particles);
//exit(1);
system = new SPH(this, settings->max_particles); //, settings->max_outer_particles);
settings->setMaxOuterParticles(10048);
}
printf("created system in RTPS\n");
//pass in the position and color vbo ids to the renderer
//get the number from the system
//renderer = new Render(system->getPosVBO(), system->getColVBO(), system->getNum());
}
void RTPS::update()
{
//eventually we will support more systems
//then we will want to iterate over them
//or have more complex behavior if they interact
system->update();
}
void RTPS::render()
{
printf("RTPS: before system->render()\n");
system->render();
/*renderer->render();
//this functionality should be inside the system's render() function
//so System should own the renderer object
if(settings->system == RTPSettings::SPH)
{
Domain grid = system->getGrid();
//should check if grid exists
renderer->render_box(grid.getBndMin(), grid.getBndMax());
renderer->render_table(grid.getBndMin(), grid.getBndMax());
}*/
}
void RTPS::printTimers()
{
system->printTimers();
}
void RTPS::setCloudMovement(bool mvt)
{
cloud_movement = mvt;
printf("rtps::setCloudMovement: %d\n", mvt);
}
bool RTPS::getCloudMovement()
{
return cloud_movement;
}
void RTPS::setCloudTranslate(float cx, float cy, float cz)
{
cloud_translate = float4(cx, cy, cz, 1.);
}
float4& RTPS::getCloudTranslate()
{
return cloud_translate;
}
void RTPS::setRotationAxis(float4& rotation_axis)
{
this->rotation_axis = rotation_axis;
}
float4& RTPS::getRotationAxis()
{
return rotation_axis;
}
};