我想将 OpenGL 图形绘制到多个窗口中。所有窗户都“通向”同一个“世界”,据我所知,有两种选择:
在窗口之间共享上下文。对于 GLFW 来说,这是一项非常简单的任务,我在这方面取得了一些进展,但是,代码变得越来越模糊,而且我知道 OpenGL 不是多线程的,因此从多线程渲染到多个上下文中没有任何好处。
我看到一个建议,有一个单一的上下文,并使用它来一个一个地渲染所有窗口,即渲染第一个窗口,交换缓冲区,渲染第二个窗口,交换缓冲区,再次渲染第一个窗口,依此类推。
但是,我无法确定是否可以使用 GLFW 的选项二。在图书馆的概念中,窗口和上下文看起来紧密相连。
您可以创建多个上下文和“共享列表”,请参阅文档:
在创建窗口及其 OpenGL 或 OpenGL ES 上下文时
glfwCreateWindow,您可以指定另一个窗口,新窗口应与其上下文共享其对象(纹理、顶点和元素缓冲区等)。
GLFWwindow* second_window = glfwCreateWindow(640, 480, "Second Window", NULL, first_window);
这将允许您避免为每个窗口复制所有资产,如纹理和缓冲区。
您断言 OpenGL 不是多线程的。多个线程可以同时使用多个上下文。现代 GPU 有多个命令队列,因此其并行度取决于显示驱动程序和硬件功能。在任何情况下,使用多个处理器很可能会获得净收益,即使使用多个线程引入了开销,假设您的渲染线程不是太微不足道。
即使您确实一次在每个窗口上创建一个当前上下文,这也会引入开销,即同步和顺序。任何时候我都会将并发 + 开销超过顺序 + 开销。
| 归档时间: |
|
| 查看次数: |
2093 次 |
| 最近记录: |