c++ - GLFW getkey 'esc' 并关闭窗口

标签 c++ opengl glfw

我正在尝试获取“esc”键输入并关闭窗口。我找到了两种方法,第一种是:

static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods){
    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
        glfwSetWindowShouldClose(window, GL_TRUE);
}

glfwSetKeyCallback(window, key_callback);

while(!glfwWindowShouldClose(window)){
    render();
}

另一个是:

    glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);

    while( glfwGetKey(window, GLFW_KEY_ESCAPE ) != GLFW_PRESS &&
              glfwWindowShouldClose(window) == 0 ){
    render();
}

我想知道这两种方式是否一样?如果有任何情况,这两者的工作方式会有所不同。

最佳答案

您可以说它们的工作方式有点相同,但请相信 glfwSetKeyCallback回调。

当您调用 glfwPollEvents 时然后它接受所有未决事件并相应地调用每个相应的回调。问题是 glfwGetKey只返回指定键的最后状态。

如果您(按时间顺序)有这样的事件流,这就会成为一个问题:

*Press Escape*
*Release Escape*
glfwPollEvents() <- Calls the callback two times
glfwGetKey(window, GLFW_KEY_ESCAPE) <- returns GLFW_RELEASE

按键回调将在按下和释放时调用。然而glfwGetKey将返回 GLFW_RELEASE,因为这是转义键的最后状态。

那么他们会采取同样的行动吗?可能吧。你能相信情况总是如此吗?没有。

关于c++ - GLFW getkey 'esc' 并关闭窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43532947/

相关文章:

c++ - 构建项目的 Eclipse CDT 问题

c++ - SDL1.2,另一个窗口中的窗口

opengl - glGenBuffers 和 glCreateBuffers 的区别

opengl - 体素锥追踪软阴影

c - 为什么初始化 gl3w 比初始化 GLEW 快得多?

C++ 使用 DrawText 重绘

c++ - C++ 对象布局是否必须静态定义?

c# - 可能的渲染性能优化

python - "ImportError: Failed to load GLFW3 shared library"在 Linux 上没有 root 访问权限

c++ - 使用两个着色器程序打开两个不同的三角形