X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fpartcache.cpp;h=5589b0dd8b7c948685964fe5c49aa6cb2dda50a4;hb=754751fd474c6eac073fa7e89a18142fc89cb4fb;hp=e270dc4775eef4f005161304587fa3c58d17f915;hpb=1aa6cd9b865e366737dcc9d2d36c4f8faed5bc4f;p=libs%2Fgltk.git diff --git a/source/partcache.cpp b/source/partcache.cpp index e270dc4..5589b0d 100644 --- a/source/partcache.cpp +++ b/source/partcache.cpp @@ -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