{
MatrixStack::Push push_mtx(bld.matrix());
- bld.begin(QUADS);
unsigned prev = 0;
for(string::const_iterator i=str.begin(); i!=str.end();)
{
if(prev)
bld.matrix() *= Matrix::translation(get_glyph_advance(prev, c), 0, 0);
- create_glyph_vertices(j->second, bld);
+ create_glyph_quad(j->second, bld);
prev = c;
}
- bld.end();
}
-void Font::create_glyph_vertices(const Glyph &glyph, VertexBuilder &bld) const
+void Font::create_glyph_quad(const Glyph &glyph, PrimitiveBuilder &bld) const
{
+ bld.begin(TRIANGLE_STRIP);
+ bld.texcoord(glyph.x1, glyph.y2);
+ bld.vertex(glyph.off_x, glyph.off_y+glyph.h);
bld.texcoord(glyph.x1, glyph.y1);
bld.vertex(glyph.off_x, glyph.off_y);
- bld.texcoord(glyph.x2, glyph.y1);
- bld.vertex(glyph.off_x+glyph.w, glyph.off_y);
bld.texcoord(glyph.x2, glyph.y2);
bld.vertex(glyph.off_x+glyph.w, glyph.off_y+glyph.h);
- bld.texcoord(glyph.x1, glyph.y2);
- bld.vertex(glyph.off_x, glyph.off_y+glyph.h);
+ bld.texcoord(glyph.x2, glyph.y1);
+ bld.vertex(glyph.off_x+glyph.w, glyph.off_y);
+ bld.end();
}
float Font::get_glyph_advance(unsigned code, unsigned next) const
{ return build_string<StringCodec::Utf8>(str, pb); }
private:
- void create_glyph_vertices(const Glyph &, VertexBuilder &) const;
+ void create_glyph_quad(const Glyph &, PrimitiveBuilder &) const;
float get_glyph_advance(unsigned, unsigned = 0) const;
};