我在使用发布模式编译时没有调用函数时遇到问题,当应用无优化时,它在调试模式和发布模式下工作正常。任何人都知道它为什么这样做?我正在使用Visual C ++ Express 2010。
void CShader::SetUniforms(const GLuint NumUniforms, const LPUNIFORM Uniforms)
{
if(!m_HasUniforms || !Uniforms)
return;
for(GLuint i = 0; i < NumUniforms; i++)
{
SetUniformData(i, Uniforms[i].Size, Uniforms[i].NumValues, Uniforms[i].Value);
}
}
你可以看到它应该调用SetUniformData(...)NumUniforms次,但是在发布模式下它只是不调用它:s。我甚至不能在SetUniformData中放置一个断点,它只是告诉我没有可执行代码。
SetUniformData()函数如下所示:
void CShader::SetUniformData(const GLuint UniformIndex, const GLuint Size, const UINT NumValues, const GLvoid* Data)
{
switch(Size)
{
case sizeof(float):
glUniform1fv(m_UniformLocations[UniformIndex], NumValues, (GLfloat*)Data);
break;
case sizeof(Vector2f):
glUniform2fv(m_UniformLocations[UniformIndex], NumValues, (GLfloat*)Data);
break;
case sizeof(Vector3f):
glUniform3fv(m_UniformLocations[UniformIndex], NumValues, (GLfloat*)Data);
break;
case sizeof(Vector4f):
glUniform4fv(m_UniformLocations[UniformIndex], NumValues, (GLfloat*)Data);
break;
case sizeof(Matrix33f):
glUniformMatrix3fv(m_UniformLocations[UniformIndex], NumValues, GL_FALSE, (GLfloat*)Data);
break;
case sizeof(Matrix44f):
glUniformMatrix4fv(m_UniformLocations[UniformIndex], NumValues, GL_FALSE, (GLfloat*)Data);
break;
default: break;
}
}