]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/partcache.cpp
Improve widget part caching
[libs/gltk.git] / source / partcache.cpp
index e270dc4775eef4f005161304587fa3c58d17f915..5589b0dd8b7c948685964fe5c49aa6cb2dda50a4 100644 (file)
@@ -1,9 +1,13 @@
+#include "part.h"
 #include "partcache.h"
 
+using namespace std;
+
 namespace Msp {
 namespace GLtk {
 
 CachedPart::CachedPart():
+       part(0),
        texture(0),
        mesh(0)
 { }
@@ -13,12 +17,32 @@ CachedPart::~CachedPart()
        delete mesh;
 }
 
-void CachedPart::clear_mesh()
+
+void PartCache::clear()
+{
+       parts.clear();
+}
+
+void PartCache::insert_special(const Part &part)
 {
-       if(!mesh)
-               mesh = new GL::Mesh((GL::TEXCOORD2, GL::COLOR4_UBYTE, GL::VERTEX2));
-       else
-               mesh->clear();
+       if(part.get_name().empty())
+               throw invalid_argument("PartCache::insert_special");
+
+       parts.push_back(CachedPart());
+       parts.back().part = ∂
+}
+
+GL::Mesh &PartCache::create_mesh(const Part &part, const GL::Texture2D &tex)
+{
+       if(!parts.empty() && parts.back().texture==&tex)
+               return *parts.back().mesh;
+
+       parts.push_back(CachedPart());
+       CachedPart &cpart = parts.back();
+       cpart.part = ∂
+       cpart.texture = &tex;
+       cpart.mesh = new GL::Mesh((GL::TEXCOORD2, GL::COLOR4_UBYTE, GL::VERTEX2));
+       return *cpart.mesh;
 }
 
 } // namespace GLtk