Commits

vrld  committed 1d3af42

Add uniform cache in pixel effect. Remove a compiler warning and debug output.

  • Participants
  • Parent commits 2f9c8a1

Comments (0)

Files changed (3)

File src/modules/graphics/opengl/PixelEffect.cpp

 
 	GLint PixelEffect::getUniformLocation(const std::string& name)
 	{
+		std::map<std::string, GLint>::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;
 	}
 

File src/modules/graphics/opengl/PixelEffect.h

 		GLuint _program;
 		std::string _code; // volatile and stuff
 
+		// uniform location buffer
+		std::map<std::string, GLint> _uniforms;
+
 		// texture unit pool for setting images
 		static std::map<std::string, GLint> _texture_unit_pool;
 		static GLint _current_texture_unit;

File src/modules/graphics/opengl/wrap_PixelEffect.cpp

 
 	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) {
 				                     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);
 			}
 			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);