9 CachedPart::~CachedPart()
15 void PartCache::begin_rebuild()
18 throw logic_error("nested rebuild");
22 current = parts.end();
25 void PartCache::insert_special(const Part &part)
27 if(part.get_name().empty())
28 throw invalid_argument("PartCache::insert_special");
30 throw logic_error("!rebuilding");
32 for(current=next; current!=parts.end(); ++current)
33 if(current->part==&part)
35 parts.erase(next, current);
39 if(current==parts.end())
40 current = parts.insert(next, CachedPart());
42 *current = CachedPart();
43 current->part = ∂
49 GL::Mesh &PartCache::create_mesh(const Part &part, const GL::Texture2D &tex)
52 throw logic_error("!rebuilding");
54 if(current!=parts.end() && current->texture==&tex)
55 return *current->mesh;
57 for(current=next; current!=parts.end(); ++current)
58 if(current->texture==&tex)
60 parts.erase(next, current);
64 if(current==parts.end())
66 current = parts.insert(next, CachedPart());
67 current->texture = &tex;
68 current->mesh = new GL::Mesh((GL::TEXCOORD2, GL::COLOR4,GL::UNSIGNED_BYTE, GL::VERTEX2));
71 current->mesh->clear();
72 current->part = ∂
77 return *current->mesh;
80 void PartCache::end_rebuild()
83 parts.erase(next, parts.end());