-#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;
Part::Part(const string &n):
name(n)
{
- for(unsigned i=0; i<N_STATES_; ++i)
- graphic[i] = 0;
+ fill(graphic, graphic+N_STATES_, static_cast<Graphic *>(0));
}
const Graphic *Part::get_graphic(State state) const
return graphic[state];
}
-void Part::render(const Geometry &parent, State state) const
+void Part::build(const Geometry &parent, State state, PartCache &cache) const
{
- if(!graphic[state])
+ if(!graphic[state] || !graphic[state]->get_texture())
return;
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.create_mesh(*this, *graphic[state]->get_texture()));
+ bld.matrix() *= GL::Matrix::translation(rgeom.x, rgeom.y, 0);
+ graphic[state]->build(rgeom.w, rgeom.h, bld);
}