如何使用单个 OpenGL 上下文渲染到多个 windows?

How to render to multiple windows using a single OpenGL context?

我使用 GLFW 创建了两个 windows。第一个 window 有一个 OpenGL 上下文,第二个没有。我想要做的是使用单个 OpenGL 上下文将相同的场景渲染到 windows。像这样。

glBindVertexArray(vaoId);

// ... tell OpenGL to draw on first window

glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(...);

// ... swap first window buffers

// ... tell OpenGL to draw on second window

glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(...);

// ... swap second window buffers

glBindVertexArray(0);

问题是我不知道如何告诉 OpenGL 在特定的 window 上绘制。而且我也不知道如何为特定 window 交换缓冲区。如果有必要,我可以使用 Win32 API。

据我所知,GLFW 在 API 中并不直接支持它。它一般将一个Window和一个GL上下文视为一个单元。但是,使用原生 APIs,您可以为所欲为。对于 windows 32 partiuclar,查看 wglMakeCurrent(). In GLFW, you can get the required context and window handles via GLFW's native access API. Note that you will only get a HWND that way, you will have to manually use GetDC() 以获取 window.

的设备上下文

请注意,切换上下文意味着刷新 GL 命令队列,这会对性能产生负面影响。有关详细信息,请参阅 GL_KHR_context_flush_control