1

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

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 在特定窗口上绘图。而且我也不知道如何为特定窗口交换缓冲区。如果有必要,我可以使用 Win32 API。

4

1 回答 1

3

据我所知,GLFW 的 API 并不直接支持这一点。它通常将一个 Window 和一个 GL 上下文视为一个单元。但是,使用本机 API,您可以做任何您想做的事情。对于特别是 Windows 32,请查看wglMakeCurrent(). 在 GLFW 中,您可以通过GLFW 的原生访问 API获取所需的上下文和窗口句柄。请注意,您只会获得HWND这种方式,您必须手动使用GetDC()来获取窗口的设备上下文。

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

于 2018-05-20T15:55:32.893 回答