具有多个设备(监视器)的 OpenGL 上下文

Posted

技术标签:

【中文标题】具有多个设备(监视器)的 OpenGL 上下文【英文标题】:OpenGL Context with Multiple Devices (Monitors) 【发布时间】:2017-08-18 23:55:33 【问题描述】:

在 OpenGL 中,当我创建一个窗口时,我会隐式地创建一个带有 GLUT 之类的图形上下文。假设我将我的窗口拖到由不同显卡驱动的显示器中(例如,一个是英特尔嵌入式显卡,另一个是 NVidia)。 谁渲染了窗口?对于以下每种情况,哪个设备运行图形管道。

即使我将窗口完全拖入一个窗口或另一个窗口,glGetString(GL_RENDERER) 似乎总是返回主显示(创建 GLUT 窗口的位置)。 (我猜这一切都由初级完成......)有人可以帮我理解这个吗?

注意,使用 Windows 10、GLUT、OpenGL,但如果重要,我一般会问这些问题。

【问题讨论】:

您是在说 Nvidia 的 Optimus 生效的一般情况吗? 相关here 【参考方案1】:

GL 对窗口一无所知,只知道上下文。 GL 渲染到当前上下文中的帧缓冲区。

您可以编写一种向操作系统询问窗口在哪里的方法,并使用两个上下文,并根据操作系统的回答将正确的上下文设置为当前。

【讨论】:

是的,我假设每个窗口都有一个上下文或者有一个全局上下文(GLUT)。让我感到困惑的是,每个窗口可能有不同的分辨率等......所以任何图形上下文都必须能够在任何监视器(设备)上绘制。对吗? 您在显示设备上创建上下文。它的驱动程序在幕后管理演示。

以上是关于具有多个设备(监视器)的 OpenGL 上下文的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL在没有或有静态设备上下文的情况下加载纹理?

OpenGL获取设备上下文

具有多个从设备上下文的 pymodbus Modbus 服务器实现 - 写入寄存器会覆盖所有从设备

使用 ubuntu 在不同的显示器上共享 opengl 上下文

无法释放设备上下文、HWND,并且无法取消注册 Windows 类(OpenGL) -

多个 OpenGL 上下文/视图