From: John Tsiombikas Date: Sat, 17 Sep 2016 03:45:31 +0000 (+0300) Subject: lazy meshing X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=antikythera;a=commitdiff_plain;h=2c8e92970f198061a0cefdb59c2d0ec8c58409c9 lazy meshing --- diff --git a/src/machine.cc b/src/machine.cc index 1a78452..274362a 100644 --- a/src/machine.cc +++ b/src/machine.cc @@ -9,6 +9,7 @@ static float delta_angle(float a, float b); Machine::Machine() { meshing = 0; + meshing_valid = false; visited = 0; } @@ -29,6 +30,7 @@ Machine::~Machine() void Machine::add_gear(Gear *g) { gears.push_back(g); + meshing_valid = false; } 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); } +void Machine::invalidate_meshing() +{ + meshing_valid = false; +} + void Machine::calc_meshing() { int ngears = (int)gears.size(); @@ -142,6 +149,11 @@ void Machine::update(float dt) { 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 gears; bool **meshing; + bool meshing_valid; bool *visited; /* used for update_gear */ std::vector motors; @@ -26,6 +27,7 @@ public: void add_gear(Gear *g); /* takes ownership */ void add_motor(int gearidx, float speed_hz); + void invalidate_meshing(); void calc_meshing(); void update(float dt); diff --git a/src/main.cc b/src/main.cc index 7efc114..6fc85ba 100644 --- a/src/main.cc +++ b/src/main.cc @@ -88,7 +88,6 @@ bool init() machine->add_gear(gear3); machine->add_motor(0, 1.0); - machine->calc_meshing(); start_time = glutGet(GLUT_ELAPSED_TIME); return true;