9 void PartCache::begin_rebuild()
12 throw logic_error("nested rebuild");
16 current = parts.end();
19 void PartCache::insert_special(const Part &part)
21 if(part.get_name().empty())
22 throw invalid_argument("PartCache::insert_special");
24 throw logic_error("!rebuilding");
26 current = find_if(next, parts.end(), [&part](const CachedPart &p){ return p.part==∂ });
27 if(current!=parts.end())
28 parts.erase(next, current);
30 if(current==parts.end())
31 current = parts.insert(next, CachedPart());
33 *current = CachedPart();
34 current->part = ∂
40 GL::Mesh &PartCache::create_mesh(const Part &part, const GL::Texture2D &tex)
43 throw logic_error("!rebuilding");
45 if(current!=parts.end() && current->texture==&tex)
46 return *current->mesh;
48 for(current=next; current!=parts.end(); ++current)
49 if(current->texture==&tex)
51 parts.erase(next, current);
55 if(current==parts.end())
57 current = parts.insert(next, CachedPart());
58 current->texture = &tex;
59 current->mesh = make_unique<GL::Mesh>((GL::TEXCOORD2, GL::COLOR4,GL::UNSIGNED_BYTE, GL::VERTEX2));
62 current->mesh->clear();
63 current->part = ∂
68 return *current->mesh;
71 void PartCache::end_rebuild()
74 parts.erase(next, parts.end());