Windows中的设备上下文是可以(理论上)绘制的表面,并且可以对显示器可见。 Windows具有设备上下文,桌面窗口和监视器也是如此。各个窗口可以共享设备上下文;对于代表简单控件等的子窗口,可能会发生这种情况。
设备上下文没有您所指的父/子关系。整体
CS_PARENTDC
事情
是关于窗口设备上下文的剪切矩形。
一个窗口有一个设备上下文,句点(如果窗口不使用,它会比那个复杂一点
CS_OWNDC
,但无论窗口在哪里,你都应该在处理OpenGL时使用它。术语“设备上下文”不应与“监视器”或任何实际硬件混淆。它只是一个你可以画的表面。
对于OpenGL,设备上下文仅与渲染上下文具有相对松散的关联。只要使用与新DC相同的像素格式创建RC,将任何设备上下文与RC一起使用是合法的。所以你可以在DC1上设置一个像素格式,用它做一个RC,然后在DC2上设置相同的像素格式,你可以使用带有DC1或DC2的wglMakeCurrent和那个RC。
多监视器的东西如何与OpenGL一起使用完全取决于GPU的设置。允许OpenGL在Windows上工作的ICD机制只允许使用
单
要安装的驱动程序。因此,如果您的系统中有两张卡,每个卡插入单独的显示器,有两个不同的驱动程序,OpenGL将只识别其中一个。尝试绘制部分位于其他GPU屏幕上的DC会产生不可预测的结果。
现在,如果你有一张卡供给多个显示器,OpenGL并不在意。问题是独立的可见图形处理器的数量。
话虽这么说,SLI / Crossfire的重点是
假装
两个GPU实际上只是一个。因此,你有
一
驱动程序,操作系统才真正看到
一
GPU,只有
一
这些卡输出到监视器。因此,OpenGL的工作方式与为一个卡提供多个监视器的工作方式完全相同。