From a64e2e362cd7bce6f103f8878d69fcca4261bac9 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Wed, 28 Nov 2012 20:22:09 +0200 Subject: [PATCH] Change font methods to better differentiate between drawing and building --- source/font.cpp | 9 +++++---- source/font.h | 26 ++++++++++++++++---------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/source/font.cpp b/source/font.cpp index c96ec750..d03ce281 100644 --- a/source/font.cpp +++ b/source/font.cpp @@ -56,16 +56,17 @@ float Font::get_string_width(const string &str, StringCodec::Decoder &dec) const return x; } -void Font::draw_string(const string &str, StringCodec::Decoder &dec) const +void Font::draw_string(const string &str, StringCodec::Decoder &dec, const Color &color) const { + Bind bind_tex(get_texture(), true); Immediate imm((TEXCOORD2, COLOR4_UBYTE, VERTEX2)); - draw_string(str, dec, imm); + imm.color(color); + build_string(str, dec, imm); } -void Font::draw_string(const string &str, StringCodec::Decoder &dec, PrimitiveBuilder &bld) const +void Font::build_string(const string &str, StringCodec::Decoder &dec, PrimitiveBuilder &bld) const { MatrixStack::Push push_mtx(bld.matrix()); - Bind bind_tex(get_texture(), true); bld.begin(QUADS); for(string::const_iterator i=str.begin(); i!=str.end();) diff --git a/source/font.h b/source/font.h index 14320b8f..21c202d7 100644 --- a/source/font.h +++ b/source/font.h @@ -79,28 +79,34 @@ public: float get_string_width(const std::string &str) const { return get_string_width(str); } - void draw_string(const std::string &, StringCodec::Decoder &) const; - void draw_string(const std::string &, StringCodec::Decoder &, PrimitiveBuilder &) const; + /// Draws a string to the framebuffer with Immediate. + void draw_string(const std::string &, StringCodec::Decoder &, const Color & = Color()) const; template - void draw_string(const std::string &str) const + void draw_string(const std::string &str, const Color &color = Color()) const { typename C::Decoder dec; - draw_string(str, dec); + draw_string(str, dec, color); } - void draw_string(const std::string &str) const - { draw_string(str); } + void draw_string(const std::string &str, const Color &color = Color()) const + { draw_string(str, color); } + + /** Builds the primitives for a string. The PrimitiveBuilder should be + associated with a target that has at least VERTEX2 and TEXCOORD2 components. + The texture is not bound, to avoid unnecessary bindings when creating + meshes. */ + void build_string(const std::string &, StringCodec::Decoder &, PrimitiveBuilder &) const; template - void draw_string(const std::string &str, PrimitiveBuilder &pb) const + void build_string(const std::string &str, PrimitiveBuilder &pb) const { typename C::Decoder dec; - draw_string(str, dec, pb); + build_string(str, dec, pb); } - void draw_string(const std::string &str, PrimitiveBuilder &pb) const - { return draw_string(str, pb); } + void build_string(const std::string &str, PrimitiveBuilder &pb) const + { return build_string(str, pb); } private: void create_glyph_vertices(const Glyph &, VertexBuilder &) const; -- 2.45.2