Функция не вызывается в режиме разблокировки? - PullRequest
0 голосов
/ 27 ноября 2011

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