From: Mikko Rasa Date: Wed, 17 Oct 2007 06:22:28 +0000 (+0000) Subject: Allow retrieving data from Mesh X-Git-Tag: 0.9~32 X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=commitdiff_plain;h=80aac2618536baaa99b92629be6931363c49c4de Allow retrieving data from Mesh Make use of DataFile::Collection in loading Font --- diff --git a/source/font.cpp b/source/font.cpp index 7cea8695..a19a94e5 100644 --- a/source/font.cpp +++ b/source/font.cpp @@ -16,19 +16,12 @@ namespace GL { Font::Font(): tex(0), - own_tex(false), default_size(1), ascent(1), descent(0), varray((TEXCOORD2, VERTEX2)) { } -Font::~Font() -{ - if(own_tex) - delete tex; -} - void Font::set_texture(const Texture2D &t) { tex=&t; @@ -148,13 +141,24 @@ float Font::get_glyph_advance(unsigned code) const Font::Loader::Loader(Font &f): - font(f) + font(f), + coll(0) { - add("default_size", &Font::default_size); - add("ascent", &Font::ascent); - add("descent", &Font::descent); - add("texture", &Loader::texture); - add("glyph", &Loader::glyph); + init(); +} + +Font::Loader::Loader(Font &f, Collection &c): + font(f), + coll(&c) +{ + init(); +} + +DataFile::Collection &Font::Loader::get_collection() +{ + if(!coll) + throw InvalidState("No collection"); + return *coll; } Font::Loader::~Loader() @@ -162,13 +166,13 @@ Font::Loader::~Loader() font.create_glyph_vertices(); } -void Font::Loader::texture(const string &t) +void Font::Loader::init() { - Texture2D *tex=new Texture2D; - tex->parameter(GL_GENERATE_MIPMAP, 1); - font.tex=tex; - tex->image(t); - font.own_tex=true; + add("default_size", &Font::default_size); + add("ascent", &Font::ascent); + add("descent", &Font::descent); + add("texture", &Font::tex); + add("glyph", &Loader::glyph); } void Font::Loader::glyph(unsigned c) diff --git a/source/font.h b/source/font.h index a5593351..3178a4c2 100644 --- a/source/font.h +++ b/source/font.h @@ -10,7 +10,7 @@ Distributed under the LGPL #include #include -#include +#include #include #include "vertexarray.h" @@ -22,21 +22,27 @@ class Texture2D; class Font { public: - class Loader: public Msp::DataFile::Loader + class Loader: public DataFile::Loader { + private: + Font &font; + DataFile::Collection *coll; + public: + typedef DataFile::Collection Collection; + Loader(Font &); + Loader(Font &, DataFile::Collection &); ~Loader(); Font &get_object() { return font; } + DataFile::Collection &get_collection(); private: - Font &font; - + void init(); void texture(const std::string &); void glyph(unsigned); }; Font(); - ~Font(); void set_texture(const Texture2D &); void add_glyph(unsigned, float, float, float, float, float, float, float, float, float); @@ -88,7 +94,6 @@ private: typedef std::map GlyphMap; const Texture2D *tex; - bool own_tex; float default_size; float ascent; float descent; diff --git a/source/mesh.h b/source/mesh.h index 7c80d322..4af66a39 100644 --- a/source/mesh.h +++ b/source/mesh.h @@ -33,6 +33,8 @@ public: Mesh(VertexFormat f); RefPtr modify_vertices() { return vertices.modify(); } void add_batch(const Batch &b); + const VertexArray &get_vertices() const { return vertices; } + const std::list &get_batches() { return batches; } void draw() const; private: VertexArray vertices;