]> git.tdb.fi Git - libs/gl.git/blobdiff - source/font.h
Add vertex arrays and buffers
[libs/gl.git] / source / font.h
index a4600fc2558652950dc8088fa146086f592765bf..ebaa8e7a7f43f469b7ae1ae246db6d92ad860bde 100644 (file)
@@ -4,6 +4,7 @@
 #include <map>
 #include <string>
 #include <msp/parser/loader.h>
+#include "vertexarray.h"
 
 namespace Msp {
 namespace GL {
@@ -17,6 +18,8 @@ public:
        {
        public:
                Loader(Font &);
+               ~Loader();
+               Font &get_object() { return font; }
        private:
                Font &font;
 
@@ -26,10 +29,13 @@ public:
 
        Font();
        void  set_texture(const Texture2D &);
-       void  add_glyph(wchar_t, float, float, float, float, float, float, float, float);
+       void  add_glyph(wchar_t, float, float, float, float, float, float, float, float, float);
+       float get_default_size() const { return default_size; }
        float get_string_width(const std::string &) const;
+       float get_string_width(const std::wstring &) const;
        void  draw_glyph(wchar_t);
        void  draw_string(const std::string &) const;
+       void  draw_string(const std::wstring &) const;
        void  draw_multiline(const std::string &) const;
        ~Font();
 private:
@@ -45,23 +51,30 @@ private:
 
                        void texcoords(float, float, float, float);
                        void size(float, float);
+                       void offset(float, float);
                };
 
                wchar_t code;
                float x1,y1;
                float x2,y2;
                float w,h;
-               float descent;
+               float off_x, off_y;
                float advance;
+               unsigned index;
        };
        typedef std::map<wchar_t, Glyph> GlyphMap;
 
        const Texture2D *tex;
        bool     own_tex;
+       float    default_size;
        GlyphMap glyphs;
+       VertexArray varray;
 
-       void prepare(float *) const;
-       void draw_glyph(wchar_t, float *, float &) const;
+       void create_glyph_vertices();
+       void create_glyph_vertices(const Glyph &, VertexArrayBuilder &);
+       void prepare_render() const;
+       void draw_glyph(wchar_t) const;
+       float get_glyph_advance(wchar_t) const;
 };
 
 } // namespace GL