X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Ftext.cpp;h=5305de4bd5b46db5f12874aa9a03ec73e27bcd8c;hb=f19366d32cc29287a2730cfba90893e407754081;hp=3b2380c4200cf74cd1d4080ddd35b14d76042ca9;hpb=fa2b4c8a93ebad2497cacfdeaa9a2c20be486520;p=libs%2Fgl.git diff --git a/source/render/text.cpp b/source/render/text.cpp index 3b2380c4..5305de4b 100644 --- a/source/render/text.cpp +++ b/source/render/text.cpp @@ -1,5 +1,7 @@ #include "meshbuilder.h" #include "program.h" +#include "renderer.h" +#include "technique.h" #include "text.h" #include "texture2d.h" @@ -8,7 +10,8 @@ using namespace std; namespace Msp { namespace GL { -Text::Text(const Font &f, const Technique *tech, const string &tex_slot): +Text::Text(const Font &f, const Technique *tech, Tag tex_slot): + ObjectInstance(object), font(f), mesh((TEXCOORD2, VERTEX2)), horz_align(0.0f), @@ -20,12 +23,11 @@ Text::Text(const Font &f, const Technique *tech, const string &tex_slot): set_technique(tech, tex_slot); } -void Text::set_technique(const Technique *tech, const string &ts) +void Text::set_technique(const Technique *tech, Tag tex_slot) { if(tech) { - const char *tex_slot = ts.c_str(); - if(!*tex_slot && tech->has_pass(Tag())) + if(!tex_slot.id && tech->has_pass(Tag())) if(const Program *shprog = tech->get_pass(Tag()).get_shader_program()) { if(shprog->get_uniform_location(Tag("font_tex"))>=0) @@ -38,17 +40,14 @@ void Text::set_technique(const Technique *tech, const string &ts) tex_slot = "base_color_map"; } - if(tex_slot) - { - technique = *tech; - technique.replace_texture(tex_slot, font.get_texture()); - object.set_technique(&technique); - } - else - object.set_technique(tech); + object.set_technique(tech); + texture_slot = tex_slot; } else + { object.set_technique(0); + texture_slot = Tag(); + } } void Text::set_text(const string &text, StringCodec::Decoder &dec) @@ -104,15 +103,16 @@ void Text::set_alignment(float h, float v) unsigned n_vertices = mesh.get_n_vertices(); for(unsigned i=0; i(mesh.modify_vertex(i)+pos_offset); pos[0] += horz_adjust; pos[1] += vert_adjust; } } -void Text::render(Renderer &renderer, Tag tag) const +void Text::setup_render(Renderer &renderer, Tag tag) const { - object.render(renderer, tag); + ObjectInstance::setup_render(renderer, tag); + renderer.set_texture(texture_slot, &font.get_texture()); } } // namespace GL