X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Frender%2Ftext.cpp;h=a51d2cf16778a82bc3778c47203a618f39b5cc91;hp=3b2380c4200cf74cd1d4080ddd35b14d76042ca9;hb=HEAD;hpb=fa2b4c8a93ebad2497cacfdeaa9a2c20be486520 diff --git a/source/render/text.cpp b/source/render/text.cpp index 3b2380c4..a51d2cf1 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,25 +10,22 @@ 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), - vert_offset(0.0f), - width(0.0f) + mesh((TEXCOORD2, VERTEX2)) { object.set_mesh(&mesh); if(tech) 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(const Program *shprog = tech->get_pass(Tag()).get_shader_program()) + if(!tex_slot.id && tech->has_method(Tag())) + if(const Program *shprog = tech->get_method(Tag()).get_shader_program()) { if(shprog->get_uniform_location(Tag("font_tex"))>=0) tex_slot = "font_tex"; @@ -38,17 +37,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 +100,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