gpt4 book ai didi

c++ - GLFW 轮询等到窗口调整大小完成,如何解决?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:13 26 4
gpt4 key购买 nike

我正在开发一个 GLFW 应用程序,我注意到在调整窗口大小时出现问题。

当用户缩放窗口时,glfwPollEvents() 函数会等待用户完成缩放。这意味着,在缩放窗口期间,不会调用渲染函数并创建可怕的伪像。

我通过从主循环调用渲染函数以及窗口调整大小回调来解决这个问题:

#include <GLFW/glfw3.h>

static void render(GLFWwindow* window) {
glfwMakeContextCurrent(window);

glClear(GL_COLOR_BUFFER_BIT);

glfwSwapBuffers(window);
}

static void window_size_callback(GLFWwindow* window, int width, int height) {
render(window);
glViewport(0, 0, width, height);
}

int main(void) {
if (!glfwInit()) {
return -1;
}

GLFWwindow* window = glfwCreateWindow(640, 480, "Terrain chunk render", NULL, NULL);
if (!window) {
glfwTerminate();
return -1;
}

glfwSetWindowSizeCallback(window, window_size_callback);

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

glfwTerminate();
return 0;
}

但是,这意味着当用户在缩放窗口而不实际移动窗口后按住鼠标按钮时,不会调用渲染函数。有没有一种有效的方法来解决这个问题并使渲染函数的调用更加一致?

最佳答案

使用两个线程,一个用于轮询事件,一个用于渲染。您可能还想使用 glfwWaitEvents 而不是 glfwPollEvents 来阻塞事件线程,直到事件可用。

关于c++ - GLFW 轮询等到窗口调整大小完成,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23858454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com