2017-04-08 78 views
-1

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

+2

你问你的问题的方式XY XY问题(http://xyproblem.info)。你有问题X,你认为做Y可能会帮助你解决X,但是你也不知道Y.你为什么问Y.只要告诉我们X. _ **什么是你实际上正在努力完成?** _ – datenwolf

+0

为什么在这个问题上有投票和关闭票?这是一个非常好的问题。只是因为没有解决问题的办法,这并不是一个不合理的问题。如果你深入研究OpenGL窗口系统集成的细节,最终会出现这种情况。 – datenwolf

回答

0

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

这些都是关系的唯一功能,让对方:

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

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

所以你需要跟踪HGLRC的创建后。

2

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

你不能!

OpenGL渲染环境在没有连接到windows的方式。

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

OpenGL渲染上下文可以在任意设备上下文(DC)上生效,但是在DC和OpenGL上下文之间没有严格的关系。只要任何给定窗口的设备上下文与某个OpenGL上下文兼容,OpenGL上下文就可以在设备上下文中变为当前。后来,如果需要的话,可以撤消该连接,并且可以在不同窗口的不同DC上使相同的OpenGL上下文同步(只要它们兼容)。

哦,它也可以用其他方法:可以有任意数量的线程,每个线程在同一个窗口/设备上下文中同时具有不同的OpenGL上下文。

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