-/* $Id$
-
-This file is part of libmspgltk
-Copyright © 2007 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
-#include <msp/gl/transform.h>
+#include <msp/gl/meshbuilder.h>
#include "geometry.h"
#include "part.h"
+#include "partcache.h"
#include "resources.h"
using namespace std;
const Graphic *Part::get_graphic(State state) const
{
if(state>N_STATES_)
- throw InvalidParameterValue("Invalid state");
+ throw invalid_argument("Part::get_graphic");
return graphic[state];
}
-void Part::render(const Geometry &parent, State state) const
+void Part::build(const Geometry &parent, State state, CachedPart &cache) const
{
if(!graphic[state])
+ {
+ cache.texture = 0;
return;
+ }
+
+ cache.texture = graphic[state]->get_texture();
+ cache.clear_mesh();
Geometry rgeom = geom;
align.apply(rgeom, parent, margin);
- GL::translate(rgeom.x, rgeom.y, 0);
- graphic[state]->render(rgeom.w, rgeom.h);
+ GL::MeshBuilder bld(*cache.mesh);
+ bld.matrix() *= GL::Matrix::translation(rgeom.x, rgeom.y, 0);
+ graphic[state]->build(rgeom.w, rgeom.h, bld);
}
void Part::Loader::graphic(State s, const string &n)
{
- Graphic *grph = get_collection().get<Graphic>(n);
+ Graphic *grph = &get_collection().get<Graphic>(n);
for(int i=0; i<N_STATES_; ++i)
if((i&s)==s)
obj.graphic[i] = grph;