]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programdata.cpp
Make setting a nonexistent uniform only a warning in debug builds
[libs/gl.git] / source / programdata.cpp
index 3561719725501a4ca7663ad4ae6c3e825e6bd10b..f454fe5145f595ed1cd6c62488c5b433aaba9a83 100644 (file)
@@ -1,5 +1,7 @@
 #include <msp/core/maputils.h>
+#include <msp/debug/demangle.h>
 #include <msp/gl/extensions/arb_direct_state_access.h>
+#include <msp/io/print.h>
 #include "buffer.h"
 #include "color.h"
 #include "error.h"
@@ -92,10 +94,15 @@ void ProgramData::uniform(const string &name, Uniform *uni)
                else if(name[name.size()-1]==']')
                        throw invalid_argument("ProgramData::uniform");
        }
-       catch(...)
+       catch(const exception &e)
        {
                delete uni;
+#ifdef DEBUG
+               IO::print(IO::cerr, "Error while setting uniform %s: %s: %s\n", name, Debug::demangle(typeid(e).name()), e.what());
+               return;
+#else
                throw;
+#endif
        }
 
        int i = find_uniform_index(name);
@@ -421,6 +428,12 @@ const Uniform &ProgramData::get_uniform(const string &name) const
        return *uniforms[i].value;
 }
 
+const Uniform *ProgramData::find_uniform(const string &name) const
+{
+       int i = find_uniform_index(name);
+       return (i>=0 ? uniforms[i].value : 0);
+}
+
 bool ProgramData::uniform_name_compare(const NamedUniform &nu, const string &name)
 {
        return nu.name<name;