// // s is a spoke pointing OUT from x // void Subdivision::optimize(Vec2& x, Edge *s) { Edge *start_spoke = s; Edge *spoke = s; do { Edge *e = spoke->Lnext(); Edge *t = e->Oprev(); if( isInterior(e) && shouldSwap(x, e) ) swap(e); else { spoke = spoke->Onext(); if( spoke == start_spoke ) break; } } while( true ); // // Now, update all the triangles spoke = start_spoke; do { Edge *e = spoke->Lnext(); Triangle *t = e->Lface(); if( t ) t->update(*this); spoke = spoke->Onext(); } while( spoke != start_spoke ); }
void ofxDeepZoom::update() { for (list<tile>::iterator iter=tiles.begin(); iter!=tiles.end(); iter++) { if (iter->bSwap) { switch (iter->state) { case TILE_STATE_INACTIVE: iter = tiles.erase(iter); break; case TILE_STATE_QUEUE: iter->state = TILE_STATE_UNLOAD; break; case TILE_STATE_ACTIVE: if (!iter->bInside || shouldSwap(*iter)) { iter->image.getTextureReference().clear(); iter->image.setUseTexture(false); // for the clear of the pixels in threaded function iter->state = TILE_STATE_UNLOAD; } break; default: break; } } else { if (iter->state == TILE_STATE_QUEUE) { iter->image.setUseTexture(true); iter->image.reloadTexture(); iter->state = TILE_STATE_ACTIVE; break; } else switch (iter->state) { case TILE_STATE_INACTIVE: if (iter->bInside) { iter->state = TILE_STATE_LOAD; } break; case TILE_STATE_ACTIVE: if (!iter->bInside) { iter->image.getTextureReference().clear(); iter->image.setUseTexture(false); // for the clear of the pixels in threaded function iter->state = TILE_STATE_UNLOAD; } break; default: break; } } } }