У меня проблемы с функцией, которая не вызывается при компиляции в режиме выпуска, она прекрасно работает в режиме отладки и режиме выпуска, когда не применяется оптимизация .Кто-нибудь знает, почему он это делает?Я использую 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;
}
}