]> git.tdb.fi Git - libs/gl.git/commitdiff
Fix uniform array element lookup
authorMikko Rasa <tdb@tdb.fi>
Sun, 12 Aug 2012 09:07:38 +0000 (12:07 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sun, 12 Aug 2012 09:07:38 +0000 (12:07 +0300)
source/program.cpp

index 9e54d6a86a1e2cbb673ad80752fc3376225af320..749a7d9cf67735cbc60958f0c606b9f1452e4087 100644 (file)
@@ -259,7 +259,23 @@ int Program::get_uniform_location(const string &n) const
 {
        map<string, UniformInfo>::const_iterator i = uniforms.find(n);
        if(i==uniforms.end())
+       {
+               if(n[n.size()-1]==']')
+               {
+                       string::size_type open_bracket = n.rfind('[');
+                       if(open_bracket!=string::npos)
+                       {
+                               /* The requested name looks like an array.  glGetActiveUniform only
+                               gives us the first element of the array, so try to look that up and
+                               add an offset. */
+                               int offset = lexical_cast<unsigned>(n.substr(open_bracket+1, n.size()-2-open_bracket));
+                               i = uniforms.find(n.substr(0, open_bracket)+"[0]");
+                               if(i!=uniforms.end() && offset<i->second.size)
+                                       return i->second.location+offset;
+                       }
+               }
                return -1;
+       }
 
        return i->second.location;
 }