]> git.tdb.fi Git - libs/gl.git/blobdiff - source/material.cpp
Check uniforms as a hint for texunit to use for material textures
[libs/gl.git] / source / material.cpp
index 8bd6e54ca51b4bf1a48d5b86c07da3fe075d76c5..b0f62bbc5fbef9f1d07b7bcfd4b688135394c32e 100644 (file)
@@ -2,6 +2,7 @@
 #include "gl.h"
 #include "resources.h"
 #include "texturing.h"
+#include "uniform.h"
 
 using namespace std;
 
@@ -13,9 +14,17 @@ void Material::attach_texture_to(const Texture *tex, Texturing &texturing, Progr
        if(!tex)
                return;
 
-       int unit = texturing.find_free_unit(name);
+       int unit = -1;
+
+       if(const Uniform *uni = tex_shdata.find_uniform(name))
+               if(const Uniform1i *uni_int = dynamic_cast<const Uniform1i *>(uni))
+                       unit = uni_int->get();
+
+       if(unit<0)
+               unit = texturing.find_free_unit(name);
        if(unit<0)
                throw runtime_error("no free texunit");
+
        texturing.attach(unit, *tex);
        tex_shdata.uniform(name, unit);
 }