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

时间:2017-07-25 17:00:47

标签: opengl glfw

我想将OpenGL图形绘制到多个窗口中。所有的窗户都“引导”到同一个“世界”,据我所知有两种选择:

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

  2. 我看到一个建议有一个上下文并用它来逐个渲染所有窗口,即渲染第一个窗口,交换缓冲区,渲染第二个窗口,交换缓冲区,再渲染第一个窗口等等。

  3. 但是,我无法确定是否可以使用GLFW选项二。在图书馆的概念中,窗口和上下文看起来彼此紧密相连。

1 个答案:

答案 0 :(得分:3)

您可以创建多个上下文和"共享列表",请参阅the documentation

  

创建窗口及其OpenGL或OpenGL ES上下文时   glfwCreateWindow,您可以指定其上下文为新的另一个窗口   一个人应该分享它的对象(纹理,顶点和元素缓冲区,   等)。

     

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

这样可以避免重复所有资源,例如每个窗口的纹理和缓冲区。

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

即使您确实在每个窗口上一次创建一个上下文,也会引入开销,同步和顺序。我会在任何时候对顺序+开销采取并发+开销。