X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Frender%2Ftext.cpp;fp=source%2Frender%2Ftext.cpp;h=639beac142e1d66f85edfaa2bef2354074344f78;hp=b408bbe1780040cef29e600d2dab1b504b2d41b8;hb=6dc5c41fe93ed0cb4f9051387b5551182bc5df41;hpb=498d96d4da75d7b3f34587c25a8b35cc80978d43 diff --git a/source/render/text.cpp b/source/render/text.cpp index b408bbe1..639beac1 100644 --- a/source/render/text.cpp +++ b/source/render/text.cpp @@ -1,4 +1,5 @@ #include "meshbuilder.h" +#include "program.h" #include "text.h" #include "texture2d.h" @@ -7,7 +8,7 @@ using namespace std; namespace Msp { namespace GL { -Text::Text(const Font &f, const Technique *tech): +Text::Text(const Font &f, const Technique *tech, const string &tex_slot): font(f), mesh((TEXCOORD2, VERTEX2)), horz_align(0.0f), @@ -16,16 +17,35 @@ Text::Text(const Font &f, const Technique *tech): { object.set_mesh(&mesh); if(tech) - set_technique(tech); + set_technique(tech, tex_slot); } -void Text::set_technique(const Technique *tech) +void Text::set_technique(const Technique *tech, const string &ts) { if(tech) { - technique = *tech; - technique.replace_texture("diffuse_map", font.get_texture()); - object.set_technique(&technique); + 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(shprog->get_uniform_location("font_tex")>=0) + tex_slot = "font_tex"; + else if(shprog->get_uniform_location("color_tex")>=0) + tex_slot = "color_tex"; + else if(shprog->get_uniform_location("diffuse_map")>=0) + tex_slot = "diffuse_map"; + else if(shprog->get_uniform_location("base_color_map")>=0) + 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); } else object.set_technique(0);