c - 如何使用单个 OpenGL 上下文渲染到多个窗口?

标签 c opengl glfw openglcontext

我使用 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。

最佳答案

据我所知,GLFW 在它的 API 中并不直接支持它。它一般将一个Window和一个GL context视为一个单元。但是,使用 native API,您可以做您想做的事。对于 windows 32,请查看 wglMakeCurrent() .在 GLFW 中,您可以通过 GLFW's native access API 获取所需的上下文和窗口句柄。 .请注意,那样你只会得到一个 HWND,你将不得不手动使用 GetDC()获取窗口的设备上下文。

请注意,切换上下文意味着刷新 GL 命令队列,这会对性能产生负面影响。参见 GL_KHR_context_flush_control了解更多详情。

关于c - 如何使用单个 OpenGL 上下文渲染到多个窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50436390/

相关文章:

c++ - OpenGL 3.30/GLSL 3.30 - MRT 输出黑色纹理

c++ - 使用 FBO 的片段着色器的多个输出

c++ - 使用模板缓冲区概述对象会给出错误的结果

opengl - 如何用opengl制作2D地形?

opengl - glShaderSource的参数是什么意思?

c - Visual Studio 2010 中的 SOIL 设置

C 数组初始化 : tmp. c:5: 错误: ‘{’ 标记之前的预期表达式

c - 我是否要转换 malloc 的结果?

c - ubuntu下c语言单字符输入

c - OpenPBS 构建错误 - 未知类型名称 'jid_t'