]> git.tdb.fi Git - libs/gltk.git/blob - source/partcache.cpp
Improve widget part caching
[libs/gltk.git] / source / partcache.cpp
1 #include "part.h"
2 #include "partcache.h"
3
4 using namespace std;
5
6 namespace Msp {
7 namespace GLtk {
8
9 CachedPart::CachedPart():
10         part(0),
11         texture(0),
12         mesh(0)
13 { }
14
15 CachedPart::~CachedPart()
16 {
17         delete mesh;
18 }
19
20
21 void PartCache::clear()
22 {
23         parts.clear();
24 }
25
26 void PartCache::insert_special(const Part &part)
27 {
28         if(part.get_name().empty())
29                 throw invalid_argument("PartCache::insert_special");
30
31         parts.push_back(CachedPart());
32         parts.back().part = ∂
33 }
34
35 GL::Mesh &PartCache::create_mesh(const Part &part, const GL::Texture2D &tex)
36 {
37         if(!parts.empty() && parts.back().texture==&tex)
38                 return *parts.back().mesh;
39
40         parts.push_back(CachedPart());
41         CachedPart &cpart = parts.back();
42         cpart.part = ∂
43         cpart.texture = &tex;
44         cpart.mesh = new GL::Mesh((GL::TEXCOORD2, GL::COLOR4_UBYTE, GL::VERTEX2));
45         return *cpart.mesh;
46 }
47
48 } // namespace GLtk
49 } // namespace Msp