我想将OpenGL图形绘制到多个窗口中。所有的窗户都“引导”到同一个“世界”,据我所知有两种选择:
在窗口之间共享上下文。这对于GLFW来说非常简单,我在这方面取得了一些进展,然而,代码变得越来越模糊,我知道OpenGL不是多线程的,所以从多个线程渲染到多个上下文没有任何好处。
我看到一个建议有一个上下文并用它来逐个渲染所有窗口,即渲染第一个窗口,交换缓冲区,渲染第二个窗口,交换缓冲区,再渲染第一个窗口等等。
但是,我无法确定是否可以使用GLFW选项二。在图书馆的概念中,窗口和上下文看起来彼此紧密相连。
答案 0 :(得分:3)
您可以创建多个上下文和"共享列表",请参阅the documentation:
创建窗口及其OpenGL或OpenGL ES上下文时
glfwCreateWindow
,您可以指定其上下文为新的另一个窗口 一个人应该分享它的对象(纹理,顶点和元素缓冲区, 等)。
GLFWwindow* second_window = glfwCreateWindow(640, 480, "Second Window", NULL, first_window);
这样可以避免重复所有资源,例如每个窗口的纹理和缓冲区。
您声称OpenGL不是多线程的。多个线程可以同时使用多个上下文。现代GPU具有多个命令队列,因此其并行性取决于显示驱动程序和硬件功能。在任何情况下,即使使用多个线程引入开销,假设您的渲染线程不是太微不足道,使用多个处理器也可能是净增益。
即使您确实在每个窗口上一次创建一个上下文,也会引入开销,同步和顺序。我会在任何时候对顺序+开销采取并发+开销。