{
if(tech)
{
- if(!tex_tag.id && tech->has_method(Tag()))
- if(const Program *shprog = tech->get_method(Tag()).get_shader_program())
+ for(const auto &kvp: tech->get_methods())
+ {
+ if(tex_tag.id)
{
- if(shprog->get_uniform_location(Tag("font_tex"))>=0)
- tex_tag = "font_tex";
- else if(shprog->get_uniform_location(Tag("color_tex"))>=0)
- tex_tag = "color_tex";
- else if(shprog->get_uniform_location(Tag("diffuse_map"))>=0)
- tex_tag = "diffuse_map";
- else if(shprog->get_uniform_location(Tag("base_color_map"))>=0)
- tex_tag = "base_color_map";
+ if((sampler = kvp.second.get_sampler(tex_tag)))
+ break;
}
+ else if(const Program *shprog = kvp.second.get_shader_program())
+ {
+ static const Tag possible_tags[] = { "font_tex", "color_tex", "diffuse_map", "base_color_map" };
+ for(Tag t: possible_tags)
+ if(shprog->get_uniform_location(t)>=0)
+ {
+ tex_tag = t;
+ sampler = kvp.second.get_sampler(t);
+ break;
+ }
+ }
+ }
object.set_technique(tech);
texture_tag = tex_tag;
{
object.set_technique(0);
texture_tag = Tag();
+ sampler = nullptr;
}
}
void Text::setup_render(Renderer &renderer, Tag tag) const
{
ObjectInstance::setup_render(renderer, tag);
- renderer.set_texture(texture_tag, &font.get_texture());
+ renderer.set_texture(texture_tag, &font.get_texture(), sampler);
}
} // namespace GL