C语言 如何从窗口获取 OpenGL 上下文?



我需要从窗口(或设备上下文)获取OpenGL上下文(HGLRC)。该函数wglGetCurrentContext无法使用,因为我不知道上下文是否绑定到当前线程。如何做到这一点?

我需要从窗口(或设备上下文)获取OpenGL上下文(HGLRC)。

你不能!

OpenGL渲染上下文与窗口完全无关

Windows 可以具有任意数量的设备上下文。至少有一个主要上下文,但可以随时创建其他上下文。

OpenGL 渲染上下文可以在任何兼容的设备上下文 (DC) 上处于活动状态,但同样,DC 和 OpenGL 上下文之间没有严格的联系。只要任何给定窗口的设备上下文与某个 OpenGL 上下文兼容,OpenGL 上下文就可以在设备上下文中成为最新的。稍后,如果需要,可以撤消该连接,并且可以在不同窗口的不同DC上使相同的OpenGL上下文处于当前状态(只要它们兼容)。

哦,它也可以反过来工作:您可以拥有任意数量的线程,每个线程在同一窗口/设备上下文上同时具有不同的 OpenGL 上下文处于活动状态。

窗口和OpenGL上下文之间根本没有双射映射。

您可以使用wglGetCurrentContext()来检查当前是否存在绑定的上下文。但是没有任何函数可用于检查HDC是否与HGLRC相关联。

这些是与相互获取有关的唯一功能:

HDC GetDC(HWND hWnd)
HWND WindowFromDC(HDC hdc)
// Depends on wglMakeCurrent()
HDC wglGetCurrentDC()
HGLRC wglGetCurrentContext()

因此,您需要在创建HGLRC后对其进行跟踪。

最新更新