diff --git a/src/modules/graphics/opengl/PixelEffect.cpp b/src/modules/graphics/opengl/PixelEffect.cpp index d155ee653..91f00c159 100644 --- a/src/modules/graphics/opengl/PixelEffect.cpp +++ b/src/modules/graphics/opengl/PixelEffect.cpp @@ -241,12 +241,18 @@ namespace opengl GLint PixelEffect::getUniformLocation(const std::string& name) { + std::map::const_iterator it = _uniforms.find(name); + if (it != _uniforms.end()) + return it->second; + GLint location = glGetUniformLocation(_program, name.c_str()); if (location == -1) { throw love::Exception( "Cannot get location of shader variable `%s'.\n" "A common error is to define but not use the variable.", name.c_str()); } + + _uniforms[name] = location; return location; } diff --git a/src/modules/graphics/opengl/PixelEffect.h b/src/modules/graphics/opengl/PixelEffect.h index 47927b627..4d34190e4 100644 --- a/src/modules/graphics/opengl/PixelEffect.h +++ b/src/modules/graphics/opengl/PixelEffect.h @@ -39,6 +39,9 @@ namespace opengl GLuint _program; std::string _code; // volatile and stuff + // uniform location buffer + std::map _uniforms; + // texture unit pool for setting images static std::map _texture_unit_pool; static GLint _current_texture_unit; diff --git a/src/modules/graphics/opengl/wrap_PixelEffect.cpp b/src/modules/graphics/opengl/wrap_PixelEffect.cpp index fa02aa6bf..62a22af36 100644 --- a/src/modules/graphics/opengl/wrap_PixelEffect.cpp +++ b/src/modules/graphics/opengl/wrap_PixelEffect.cpp @@ -47,7 +47,7 @@ namespace opengl static int _sendVectors(lua_State * L, PixelEffect * effect, const char * name, int count) { - int dimension = lua_objlen(L, 3); + size_t dimension = lua_objlen(L, 3); float * values = new float[count * dimension]; for (int i = 0; i < count; ++i) { @@ -61,7 +61,7 @@ namespace opengl 3+i, dimension, lua_objlen(L, 3+i)); } - for (int k = 1; k <= dimension; ++k) { + for (size_t k = 1; k <= dimension; ++k) { lua_rawgeti(L, 3 + i, k); values[i * dimension + k - 1] = (float)lua_tonumber(L, -1); } @@ -131,7 +131,6 @@ namespace opengl for (int k = 1; k <= dimension*dimension; ++k) { lua_rawgeti(L, 3+i, k); values[i * dimension * dimension + k - 1] = (float)lua_tonumber(L, -1); - cout << i << "." << k << " = " << (float)lua_tonumber(L, -1) << endl; } lua_pop(L, 1 + dimension);