gpt4 book ai didi

c++ - GLFW - 在不使用循环的情况下保持窗口

转载 作者:行者123 更新时间:2023-11-30 01:54:49 26 4
gpt4 key购买 nike

为了让结果保持打开状态(窗口屏幕),我必须执行以下操作:

while (glfwGetWindowParam(GLFW_OPENED))
{
// do some stuff
glDrawPixels(...);
glfwSwapBuffers();
}

但这会循环遍历 while 循环体,直到我停止它。我不想实时渲染。

GLFW 是否有等同于 SDL_WaitEvent 的东西:

SDL_Surface* screen;
// do something with screen
SDL_Flip(screen);

SDL_Event event;
while (SDL_WaitEvent(&event))
{
// handle input
}

如果我尝试做这样的事情,程序会呈现结果但一段时间后它会停止响应:

//do stuff
glDrawPixels(...);
glfwSwapBuffers();

while (glfwGetWindowParam(GLFW_OPENED))
{
if (glfwGetKey(GLFW_KEY_ESC) == GLFW_PRESS)
{
glfwTerminate();
}
}

最佳答案

典型的 GLFW 主应用程序循环可能看起来像这样:

while (!glfwWindowShouldClose(window)) {
glfwPollEvents();
update();
draw();
glfwSwapBuffers(window);
}
glfwDestroyWindow(window);

输入可以通过回调处理,例如键盘输入回调。我使用包装器类来处理我的 GLFW 内容,所以在我创建一个窗口后,我会执行如下操作:

glfwSetWindowUserPointer(window, this);
glfwSetKeyCallback(window, glfwKeyCallback);

我的键盘回调是这样的:

void glfwKeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods) {
GlfwApp * instance = (GlfwApp *) glfwGetWindowUserPointer(window);
instance->onKey(key, scancode, action, mods);
}

onKey 方法的基类实现如下所示:

void GlfwApp::onKey(int key, int scancode, int action, int mods) {
if (GLFW_PRESS != action) {
return;
}
switch (key) {
case GLFW_KEY_ESCAPE:
glfwSetWindowShouldClose(window, 1);
return;
}
}

可以看到全类herehere .

关于c++ - GLFW - 在不使用循环的情况下保持窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21561334/

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