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