Cutout Vis2012
TUWienVisualisierung2(SS2012)-AdaptiveCutaways
 All Classes Namespaces Functions Pages
FontRenderer.h
1 #ifndef _FONTRENDERER_H_
2 #define _FONTRENDERER_H_
3 
4 #include "flextGL33.h"
5 #include "Mesh.h"
6 #include "Shader.h"
7 #include "Renderable.h"
8 #include "Scene.h"
9 #include "Shader.h"
10 #include <ft2build.h>
11 #include FT_FREETYPE_H
12 #include <unordered_map>
13 #include <string>
14 
20 {
21 public:
22  FT_UInt glyphIndex;
23  int width, height;
24  int bearingX, bearingY;
25  int advance;
26 
27  int left, top;
28 };
29 
34 class GlyphNode
35 {
36 public:
37  GlyphNode();
38  ~GlyphNode();
39 
40  GlyphDescription* gd;
41  GlyphNode* child[2];
42  int left, top, width, height;
43 
47  GlyphNode* insert(GlyphDescription* gdInsert);
48 };
49 
55 {
56 public:
57  std::vector<GlyphDescription>* glyphs;
58  GLuint textureHandle;
59  int textureWidth, textureHeight;
60  std::string fontPath;
61  int pixelHeight;
62  FT_Face face;
63 };
64 
69 class Text
70 {
71 public:
75  Text();
76  ~Text();
77 
85  void init(const std::string& text, FaceDescription* faceDescr, Scene* scene, Shader* shader);
89  virtual void render();
93  void setPosition(int pX, int pY);
94  void setText(const std::string& text);
95  const std::string& getText() const;
96 
97 private:
98  std::string _text;
99  FaceDescription* _faceDescr;
100  Scene* _scene;
101  Mesh* _mesh;
102  Shader* _shader;
103 
104  int _pX, _pY;
105 };
106 
111 {
112 public:
113  FontRenderer();
114 
124  void loadFont(const std::string& fontPath, const std::string& fontName, int pixelHeight);
132  void createText(const std::string& text, const std::string& fontName, Scene* scene, Text* textObj);
136  void render(Shader* shader);
137 private:
138  FT_Library _ftLibrary;
139  std::unordered_map<std::string, FaceDescription> _faces;
140 
141  Shader fontShader;
142 };
143 
144 
145 
146 #endif