Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/WolfireGames/overgrowth.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Graphics/text.h')
-rw-r--r--Source/Graphics/text.h99
1 files changed, 52 insertions, 47 deletions
diff --git a/Source/Graphics/text.h b/Source/Graphics/text.h
index 3ab96e95..68a048d6 100644
--- a/Source/Graphics/text.h
+++ b/Source/Graphics/text.h
@@ -35,63 +35,68 @@
#include <vector>
-struct TextCanvasTextureImpl;
+struct TextCanvasTextureImpl;
class vec2;
class Graphics;
struct CanvasTextStyle {
- enum Alignment {LEFT = 1,CENTER = 2,RIGHT = 3};
- static inline const char* GetAlignmentString( Alignment a )
- {
- switch(a)
- {
- case LEFT: return "LEFT";
- case CENTER: return "CENTER";
- case RIGHT: return "RIGHT";
- default: return "(unknown alignment)";
+ enum Alignment { LEFT = 1,
+ CENTER = 2,
+ RIGHT = 3 };
+ static inline const char* GetAlignmentString(Alignment a) {
+ switch (a) {
+ case LEFT:
+ return "LEFT";
+ case CENTER:
+ return "CENTER";
+ case RIGHT:
+ return "RIGHT";
+ default:
+ return "(unknown alignment)";
}
}
int font_face_id;
Alignment alignment;
- CanvasTextStyle():
- font_face_id(-1),
- alignment(LEFT)
- {}
+ CanvasTextStyle() : font_face_id(-1),
+ alignment(LEFT) {}
};
struct TextMetrics {
- int advance[2]; // cursor position in points (64/pixel)
- int bounds[4]; // bounding box of text in points (64/pixel)
+ int advance[2]; // cursor position in points (64/pixel)
+ int bounds[4]; // bounding box of text in points (64/pixel)
float ascenderRatio;
};
// A texture on which text can be rendered
class TextCanvasTexture {
-public:
+ public:
void Create(int width, int height);
void ClearTextCanvas();
void UploadTextCanvasToTexture();
- void AddText( const char *str, int length, const CanvasTextStyle& style, uint32_t char_output_limit );
- void AddTextMultiline( const char *str, int length, const CanvasTextStyle& style, uint32_t char_limit );
- void DebugDrawBillboard(const vec3 &pos, float scale, int lifespan);
+ void AddText(const char* str, int length, const CanvasTextStyle& style, uint32_t char_output_limit);
+ void AddTextMultiline(const char* str, int length, const CanvasTextStyle& style, uint32_t char_limit);
+ void DebugDrawBillboard(const vec3& pos, float scale, int lifespan);
void RemoveDebugDrawBillboard();
void Reset();
// (0,0) is the top-left corner of the text canvas
// The pen position is at the bottom-left corner of the text
- void SetPenPosition(const vec2 &point);
+ void SetPenPosition(const vec2& point);
void SetPenColor(int r, int g, int b, int a);
void SetPenRotation(float degrees);
- static void GetLetterPosXY(const char* str, const CanvasTextStyle &style, int letter, int coords[2]);
+ static void GetLetterPosXY(const char* str, const CanvasTextStyle& style, int letter, int coords[2]);
int GetCursorPos(const char* str, const CanvasTextStyle& style, const int coords[2], uint32_t char_limit);
TextCanvasTexture();
~TextCanvasTexture();
TextCanvasTexture(const TextCanvasTexture& other);
TextureRef GetTexture() const;
- void GetTextMetricsInfo( const char *str, int length, const CanvasTextStyle& style, TextMetrics &metrics, uint32_t char_limit );
-private:
- enum TextModeFlags {TMF_METRICS = 1, TMF_DRAW = 2, TMF_AUTO_NEWLINE = 4};
- void RenderText( const char *str, int length, const CanvasTextStyle& style, TextMetrics &metrics, uint32_t mode, uint32_t char_limit );
- TextCanvasTextureImpl *impl_;
+ void GetTextMetricsInfo(const char* str, int length, const CanvasTextStyle& style, TextMetrics& metrics, uint32_t char_limit);
+
+ private:
+ enum TextModeFlags { TMF_METRICS = 1,
+ TMF_DRAW = 2,
+ TMF_AUTO_NEWLINE = 4 };
+ void RenderText(const char* str, int length, const CanvasTextStyle& style, TextMetrics& metrics, uint32_t mode, uint32_t char_limit);
+ TextCanvasTextureImpl* impl_;
int debug_draw_billboard_id;
};
@@ -108,7 +113,7 @@ struct CharacterInfo {
// A texture containing a list of common latin characters, including ascii
class TextAtlas {
-public:
+ public:
void Create(const char* path, int pixel_height, FontRenderer* font_renderer, int flags);
void Dispose();
TextAtlas();
@@ -119,8 +124,8 @@ public:
int atlas_dims[2];
std::vector<CharacterInfo> alphabet;
static bool Pack(unsigned char* pixels, int atlas_dims[2],
- int font_face_id, int lowercase_font_face_id,
- FontRenderer* font_renderer, std::vector<CharacterInfo>& alphabet);
+ int font_face_id, int lowercase_font_face_id,
+ FontRenderer* font_renderer, std::vector<CharacterInfo>& alphabet);
int tex;
int pixel_height;
};
@@ -131,22 +136,21 @@ struct CachedTextAtlas {
int pixel_height;
int flags;
TextAtlas atlas;
-
};
struct CachedTextAtlases {
static const int kMaxAtlases = 32;
int num_atlases;
CachedTextAtlas cached[kMaxAtlases];
- CachedTextAtlases():num_atlases(0) {}
+ CachedTextAtlases() : num_atlases(0) {}
};
class TextAtlasRenderer {
-public:
+ public:
void Init();
void Dispose();
void AddText(TextAtlas* text_atlas, const char* text, int pos[2], FontRenderer* font_renderer, uint32_t char_output_limit);
- TextMetrics GetMetrics( TextAtlas* text_atlas, const char* text, FontRenderer* font_renderer, uint32_t char_output_limit);
+ TextMetrics GetMetrics(TextAtlas* text_atlas, const char* text, FontRenderer* font_renderer, uint32_t char_output_limit);
void Draw(TextAtlas* atlas, Graphics* graphics, char flags, const vec4& color);
enum TextFlags {
kTextShadow = 1
@@ -157,10 +161,11 @@ public:
static const int kFloatsPerVert = 4;
static const int kMaxCharacters = 1024;
unsigned indices[kMaxCharacters * 6];
- float verts[kMaxCharacters * 4 * kFloatsPerVert]; //2v2t
+ float verts[kMaxCharacters * 4 * kFloatsPerVert]; // 2v2t
VBORingContainer vert_vbo;
VBORingContainer index_vbo;
-private:
+
+ private:
int shader_id;
int shader_attrib_vert_coord;
int shader_attrib_tex_coord;
@@ -180,15 +185,15 @@ enum {
};
struct ASTextContext {
- FontRenderer* font_renderer;
- Graphics* graphics;
- CachedTextAtlases atlases;
- TextAtlasRenderer text_atlas_renderer;
- bool text_atlas_renderer_setup;
- ASTextContext():text_atlas_renderer_setup(false){}
-
- void ASDrawTextAtlas(const std::string &path, int pixel_height, int flags, const std::string &txt, int x, int y, vec4 color);
- void ASDrawTextAtlas2(const std::string &path, int pixel_height, int flags, const std::string &txt, int x, int y, vec4 color, uint32_t char_limit);
- TextMetrics ASGetTextAtlasMetrics(const std::string &path, int pixel_height, int flags, const std::string &txt );
- TextMetrics ASGetTextAtlasMetrics2(const std::string &path, int pixel_height, int flags, const std::string &txt, uint32_t char_limit );
+ FontRenderer* font_renderer;
+ Graphics* graphics;
+ CachedTextAtlases atlases;
+ TextAtlasRenderer text_atlas_renderer;
+ bool text_atlas_renderer_setup;
+ ASTextContext() : text_atlas_renderer_setup(false) {}
+
+ void ASDrawTextAtlas(const std::string& path, int pixel_height, int flags, const std::string& txt, int x, int y, vec4 color);
+ void ASDrawTextAtlas2(const std::string& path, int pixel_height, int flags, const std::string& txt, int x, int y, vec4 color, uint32_t char_limit);
+ TextMetrics ASGetTextAtlasMetrics(const std::string& path, int pixel_height, int flags, const std::string& txt);
+ TextMetrics ASGetTextAtlasMetrics2(const std::string& path, int pixel_height, int flags, const std::string& txt, uint32_t char_limit);
};