如何同时使用函数glfwPollEvents和glfwWaitEvents?

How to use functions glfwPollEvents and glfwWaitEvents simultaneously?

提问人:Tima Chedr 提问时间:6/15/2023 最后编辑:Rabbid76Tima Chedr 更新时间:6/15/2023 访问量:86

问:

所以基本上,glfwPollEvents 在渲染一些整洁的模型或场景时用于实时图形引擎。
glfwWaitEvents 在其他方面用于 UI 和基于回合制的应用程序,当不需要连续渲染时(仅在需要时重绘),我的引擎中有我的自定义编辑器场景视口。我想以这样一种方式拆分它们,以便在需要时更新编辑器(使用 glfwWaitEvents)。但是对于场景视口,我想使用 glfwPollEvent(因为连续渲染)。那么我怎样才能做到这一点呢?

我不能在一个线程中使用它们,因为glfwWaitEvents会阻塞主线程(glfwPollEvents也会被阻塞),直到某个事件累积。 我也尝试过使用线程解决方案,但据我所知,所有 OpenGL 绘制调用都必须从单线程完成。 目前,我的解决方案是我使用的是glfwWaitEvents,当需要进行一些重绘时,我的引擎会调用glfwEmptyEvent(用于唤醒我被阻止的线程)。那么最好的方法是什么呢?

多线程事件 GLFW

评论

0赞 BDL 6/15/2023
也许我错过了问题,但一个简单的人不能完成这项工作吗?if (editorMode) { glfwWaitEvents(); } else { glfwPollEvents(); }
0赞 Tima Chedr 6/15/2023
对不起,没有。一个窗口,只是不同的视口。
0赞 BDL 6/15/2023
所有 OpenGL 绘制调用都必须从单个线程完成:这并不完全正确:OpenGL 调用必须从使 OpenGL 上下文处于当前状态的线程进行。一个上下文可能恰好在一个线程中处于当前状态,并且每个线程可能只有一个上下文当前值。不过,具有不同 OpenGL 上下文的不同线程是完全可以的。
0赞 BDL 6/15/2023
但实际上,您的问题不在于 OpenGL 命令,而在于 glfw 调用。您能展示一下您是如何初始化引擎中的多个视口的吗?它们是单独的窗口吗?它们是否位于同一窗口中的单独控件?还是一个 OpenGL 窗口,您可以在其中决定渲染到哪里?glViewport
0赞 Erdal Küçük 6/15/2023
怎么样:glfwWaitEventsTimeout。这将以特定频率进行连续渲染侦听发生的事件相结合。

答: 暂无答案