0

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 配对。

正确还是确认?

4

1 回答 1

3

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

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

一个窗口有一个单一的设备上下文,句号(如果窗口不使用它会稍微复杂一点CS_OWNDC,但是在处理 OpenGL 时你应该总是使用它),无论窗口在哪里。术语“设备上下文”不应与“监视器”或任何实际硬件相混淆。它只是一个您可以绘制的表面。

对于 OpenGL,设备上下文与渲染上下文的关联相对松散。只要 RC 是使用与新 DC 相同的像素格式创建的,就可以将任何设备上下文与 RC 一起使用。所以你可以在 DC1 上设置一个像素格式,用它制作一个 RC,然后在 DC2 上设置相同的像素格式,你可以将 wglMakeCurrent 与 DC1 或 DC2 以及那个 RC 一起使用。

多显示器如何与 OpenGL 配合使用完全取决于 GPU 设置。允许 OpenGL 在 Windows 上工作的 ICD 机制只允许安装一个驱动程序。因此,如果您的系统中有两张卡,每张卡都插入单独的监视器,带有两个不同的驱动程序,OpenGL 将只能识别其中一个。尝试绘制到部分位于其他 GPU 屏幕上的 DC 将产生不可预知的结果。

现在,如果您有一张卡为多台显示器供电,OpenGL 不在乎。问题在于独立、可见图形处理器的数量。

话虽如此,SLI/Crossfire 的全部意义在于假装两个 GPU 实际上只是一个。因此,您有一个驱动程序,操作系统只真正看到一个GPU,并且这些卡中只有一个输出到监视器。因此,OpenGL 的工作方式与一张卡为多台显示器供电的情况完全一样。

于 2012-09-29T01:39:25.930 回答