Windows DC和GLRC对应的是什么?

时间:2012-09-29 01:14:21

标签: windows winapi opengl gdi wgl

DC在Windows中对应什么?我知道我可以从HWND或HMONITOR获得HDC。这是否意味着窗口的DC是其监视器DC的别名或代理? Windows允许您说窗口类应该有自己的DC,所以看起来它们不是相同的DC,尽管Windows API似乎也支持在DC之间建立父子关系。我会发现显示器的DC是其中一个DC吗?

如果窗口跨越多个显示器会发生什么? Windows API似乎只支持从窗口恢复单个HDC并从HDC获取单个HGLRC。我已经读过OpenGL不支持全屏窗口跨越多个监视器,因此你必须有多个窗口来完成这个。

SLI / Crossfire系统会成为单个GLRC吗?

在我看来,GLRC是最接近图形系统的东西。 GLRC代表单个图形系统。 DC代表输出。 GLRC可以绘制与连接到图形系统的输出和这些DC的任何子DC相关联的任何DC。您还可以拥有多个显示器和多个显卡,每个显卡都配对在一起,因此每个GLRC都与每个DC配对。

纠正还是确认?

1 个答案:

答案 0 :(得分:3)

Windows中的设备上下文是一个可以(理论上)绘制的表面,并且很可能对显示器可见。 Windows具有设备上下文,桌面窗口和监视器也是如此。各个窗口可以共享设备上下文;这可以通过代表简单控件等的子窗口来实现。

设备上下文没有您所指的父/子关系。整个CS_PARENTDC thing是关于窗口设备上下文的剪切矩形。

一个窗口有一个单独的设备上下文,句点(如果窗口不使用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的工作方式与为一台卡提供多个显示器的工作方式完全相同。