X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Ftexturing.cpp;fp=source%2Ftexturing.cpp;h=c30216f139ebbf91e4a7fdcb53021e1fa6cbc39f;hp=d8d178b385c05e54da6d588df0e4866e6da1a460;hb=96e13fc706ba4e1702ff90eb999ee0660278cb0d;hpb=e701721bde143379bb5c5fa4c0326c6b0e8551a4 diff --git a/source/texturing.cpp b/source/texturing.cpp index d8d178b3..c30216f1 100644 --- a/source/texturing.cpp +++ b/source/texturing.cpp @@ -1,3 +1,4 @@ +#include #include "texture.h" #include "texturing.h" #include "texunit.h" @@ -13,6 +14,23 @@ Texturing::~Texturing() unbind(); } +int Texturing::find_free_unit(const string &name_hint) const +{ + unsigned max_unit = TexUnit::get_n_units(); + // Leave some space for effect textures + max_unit -= min(max_unit/4, 8U); + unsigned initial_unit = (name_hint.empty() ? 0 : hash32(name_hint)%max_unit); + unsigned unit = initial_unit; + while(get_attached_texture(unit)) + { + unit = (unit+1)%max_unit; + if(unit==initial_unit) + return -1; + } + + return unit; +} + void Texturing::attach(unsigned attch, const Texture &tex) { set_attachment(attch, &tex);