9 CachedPart::CachedPart(CachedPart &&other):
11 texture(other.texture),
17 CachedPart &CachedPart::operator=(CachedPart &&other)
21 texture = other.texture;
27 CachedPart::~CachedPart()
33 void PartCache::begin_rebuild()
36 throw logic_error("nested rebuild");
40 current = parts.end();
43 void PartCache::insert_special(const Part &part)
45 if(part.get_name().empty())
46 throw invalid_argument("PartCache::insert_special");
48 throw logic_error("!rebuilding");
50 current = find_if(next, parts.end(), [&part](const CachedPart &p){ return p.part==∂ });
51 if(current!=parts.end())
52 parts.erase(next, current);
54 if(current==parts.end())
55 current = parts.insert(next, CachedPart());
57 *current = CachedPart();
58 current->part = ∂
64 GL::Mesh &PartCache::create_mesh(const Part &part, const GL::Texture2D &tex)
67 throw logic_error("!rebuilding");
69 if(current!=parts.end() && current->texture==&tex)
70 return *current->mesh;
72 for(current=next; current!=parts.end(); ++current)
73 if(current->texture==&tex)
75 parts.erase(next, current);
79 if(current==parts.end())
81 current = parts.insert(next, CachedPart());
82 current->texture = &tex;
83 current->mesh = new GL::Mesh((GL::TEXCOORD2, GL::COLOR4,GL::UNSIGNED_BYTE, GL::VERTEX2));
86 current->mesh->clear();
87 current->part = ∂
92 return *current->mesh;
95 void PartCache::end_rebuild()
98 parts.erase(next, parts.end());