【发布时间】:2019-03-23 20:13:52
【问题描述】:
我最近一直在学习 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]));
然后我注释掉了我添加的所有代码,以便代码与以前相同,但我仍然会抛出异常。
我认为这一行与我刚刚添加的代码无关是可以理解的,添加的代码会导致这个问题是没有意义的。这实际上是这行代码在更改代码后第二次抛出异常。上次通过不对代码进行任何更改来修复它,最终它运行了,我希望它会再次发生,但我想知道这种非常随机行为的原因可能是什么?
【问题讨论】:
-
这称为非确定性。
标签: c++ exception opengl error-handling