projects
/
antikythera
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
lazy meshing
[antikythera]
/
src
/
machine.cc
diff --git
a/src/machine.cc
b/src/machine.cc
index
1a78452
..
274362a
100644
(file)
--- a/
src/machine.cc
+++ b/
src/machine.cc
@@
-9,6
+9,7
@@
static float delta_angle(float a, float b);
Machine::Machine()
{
meshing = 0;
Machine::Machine()
{
meshing = 0;
+ meshing_valid = false;
visited = 0;
}
visited = 0;
}
@@
-29,6
+30,7
@@
Machine::~Machine()
void Machine::add_gear(Gear *g)
{
gears.push_back(g);
void Machine::add_gear(Gear *g)
{
gears.push_back(g);
+ meshing_valid = false;
}
void Machine::add_motor(int gearidx, float speed_hz)
}
void Machine::add_motor(int gearidx, float speed_hz)
@@
-39,6
+41,11
@@
void Machine::add_motor(int gearidx, float speed_hz)
motors.push_back(m);
}
motors.push_back(m);
}
+void Machine::invalidate_meshing()
+{
+ meshing_valid = false;
+}
+
void Machine::calc_meshing()
{
int ngears = (int)gears.size();
void Machine::calc_meshing()
{
int ngears = (int)gears.size();
@@
-142,6
+149,11
@@
void Machine::update(float dt)
{
int ngears = (int)gears.size();
{
int ngears = (int)gears.size();
+ if(!meshing_valid) {
+ calc_meshing();
+ meshing_valid = true;
+ }
+
memset(visited, 0, ngears * sizeof *visited);
for(size_t i=0; i<motors.size(); i++) {
int gidx = motors[i].drive;
memset(visited, 0, ngears * sizeof *visited);
for(size_t i=0; i<motors.size(); i++) {
int gidx = motors[i].drive;