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

时间:2017-04-08 08:38:12

标签: c windows winapi opengl

我需要从窗口(或设备上下文)获取OpenGL上下文(HGLRC)。函数wglGetCurrentContext不能使用,因为我不知道上下文是否绑定到当前线程。怎么办呢?

2 个答案:

答案 0 :(得分:2)

  

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

你不能!

OpenGL渲染上下文完全以 no 方式绑定到窗口。

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

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

哦,它也可以反过来:你可以拥有任意数量的线程,每个线程在相同的窗口/设备上下文中同时激活不同的OpenGL上下文。

在Windows和OpenGL上下文之间根本没有双射映射。

答案 1 :(得分:0)

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

这是与彼此相关的唯一功能:

HDC GetDC(HWND hWnd)
HWND WindowFromDC(HDC hdc)

// Depends on wglMakeCurrent()
HDC wglGetCurrentDC()
HGLRC wglGetCurrentContext()

因此,您需要在创建后跟踪HGLRC