This commit is contained in:
yangxiao 2015-01-27 16:24:07 +08:00
commit af8a6c16b1
2 changed files with 11 additions and 6 deletions

View File

@ -161,7 +161,7 @@ GLProgram::~GLProgram()
for (auto e : _hashForUniforms)
{
free(e.second);
free(e.second.first);
}
_hashForUniforms.clear();
}
@ -665,17 +665,22 @@ bool GLProgram::updateUniformLocation(GLint location, const GLvoid* data, unsign
{
GLvoid* value = malloc(bytes);
memcpy(value, data, bytes );
_hashForUniforms.insert(std::make_pair(location, value));
_hashForUniforms.insert(std::make_pair(location, std::make_pair(value, bytes)));
}
else
{
if (memcmp(element->second, data, bytes) == 0)
if (memcmp(element->second.first, data, bytes) == 0)
{
updated = false;
}
else
{
memcpy(element->second, data, bytes);
if (element->second.second < bytes){
GLvoid* value = realloc(element->second.first, bytes);
memcpy(value, data, bytes );
_hashForUniforms[location] = std::make_pair(value, bytes);
}else
memcpy(element->second.first, data, bytes);
}
}
@ -936,7 +941,7 @@ void GLProgram::reset()
for (auto e: _hashForUniforms)
{
free(e.second);
free(e.second.first);
}
_hashForUniforms.clear();

View File

@ -360,7 +360,7 @@ protected:
std::unordered_map<std::string, Uniform> _userUniforms;
std::unordered_map<std::string, VertexAttrib> _vertexAttribs;
std::unordered_map<GLint, GLvoid*> _hashForUniforms;
std::unordered_map<GLint, std::pair<GLvoid*, unsigned int>> _hashForUniforms;
//cached director pointer for calling
Director* _director;
};