Я недавно изучал OpenGL и, пока я его использовал, я столкнулся с ситуацией, когда мой код не запускается, и я попробовал некоторые вещи, которые не работали, затем однажды, без внесения каких-либо изменений, код только что запустился.
Сначала я подумал, что я, должно быть, случайно что-то изменил или забыл об изменениях, которые я сделал, хотя я был почти уверен, что не сделал этого, но это случалось со мной 3 или 4 раза, теперь самое последнее существо моя текущая ситуация.
У меня есть длинная программа OpenGL, которая представляет собой шутер от первого лица, и я хотел добавить функцию, которая позволяет пользователю изменять чувствительность, удерживая клавишу «вверх» или «вниз» во время игры. Поэтому я добавил этот код в основной файл:
void change_sensitivity(GLFWwindow* window);
float sensitivity = 0.3f; //make sensitivity a global variable
... //all the main code//
void mouse_callback(GLFWwindow* window, double xpos, double ypos)
{
...
// I remove this line:
// float sensitivity = 0.3f;
// as it is now global
...
}
void change_sensitivity(GLFWwindow* window)
{
if (glfwGetKey(window, GLFW_KEY_UP) == GLFW_PRESS)
sensitivity += 0.01;
else if (glfwGetKey(window, GLFW_KEY_DOWN) == GLFW_PRESS)
sensitivity -= 0.01;
}
После добавления этого к коду, который ранее работал правильно, я получаю исключение, выданное этой строкой:
GLCall(glUniformMatrix4fv(glGetUniformLocation(a_shader_ID, model.c_str()), 1, GL_FALSE, &a_model_matrix[0][0]));
Затем я закомментировал весь код, который я добавил, чтобы код был таким же, как прежде, и я все еще получаю исключение.
Я думаю, что понятно, что эта строка не имеет ничего общего с кодом, который я только что добавил, и нет никакого смысла в том, что добавленный код вызвал бы эту проблему. Фактически это второй раз, когда эта строка кода выдает исключение после изменения кода. В прошлый раз исправили это, не внося никаких изменений в код, и в конце концов он запустился, что, я надеюсь, повторится снова, но я хотел бы знать, что может быть причиной этого очень случайного поведения?