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

This commit is contained in:
vrld
2011-10-07 14:44:57 +02:00
parent 48137cd2e1
commit b0b9117721
3 changed files with 11 additions and 3 deletions
@@ -241,12 +241,18 @@ namespace opengl
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;
}
@@ -39,6 +39,9 @@ namespace opengl
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;
@@ -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);