gpt4 book ai didi

opengl - GLFW - 所有窗口的一个上下文

转载 作者:行者123 更新时间:2023-12-02 17:17:42 27 4
gpt4 key购买 nike

我想将 OpenGL 图形绘制到多个窗口中。据我所知,所有窗口都“通向”同一个“世界”:

  1. 在窗口之间共享上下文。这对 GLFW 来说是非常简单的任务,我在这方面取得了一些进展,但是,代码变得越来越模糊,而且我知道 OpenGL 不是多线程的,因此从多线程渲染到多上下文没有任何好处。

  2. 我看到一条建议,要有一个上下文并将其用于一个接一个地渲染所有窗口,即渲染第一个窗口,交换缓冲区,渲染第二个窗口,交换缓冲区,再次渲染第一个窗口等等。

但是,我无法确定是否有可能使用 GLFW 的选项二。在库的概念中,窗口和上下文看起来紧密相关。

最佳答案

您可以创建多个上下文和“共享列表”,参见 the documentation :

When creating a window and its OpenGL or OpenGL ES context with glfwCreateWindow, you can specify another window whose context the new one should share its objects (textures, vertex and element buffers, etc.) with.

GLFWwindow* second_window = glfwCreateWindow(640, 480, "Second
Window", NULL, first_window);

这将使您避免为每个窗口复制所有 Assets ,例如纹理和缓冲区。

您断言 OpenGL 不是多线程的。多个线程可以同时使用多个上下文。现代 GPU 具有多个命令队列,因此其并行性将取决于显示驱动程序和硬件功能。在任何情况下,假设您的渲染线程不是太微不足道,即使使用多个线程会引入开销,使用多个处理器也可能会带来净 yield 。

即使您确实使一个上下文在每个窗口上一次一个地成为当前上下文,这也会引入开销,因为它是同步的和顺序的。我会在任何时候采用并发 + 开销而不是顺序 + 开销。

关于opengl - GLFW - 所有窗口的一个上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45309537/

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