C 如何从窗口获取OpenGL上下文?
我需要从窗口(或设备上下文)获取OpenGL上下文(一个C 如何从窗口获取OpenGL上下文?,c,windows,winapi,opengl,C,Windows,Winapi,Opengl,我需要从窗口(或设备上下文)获取OpenGL上下文(一个HGLRC)。无法使用函数wglGetCurrentContext,因为我不知道上下文是否绑定到当前线程。如何做到这一点?您可以使用wglGetCurrentContext()检查当前是否绑定了上下文。但是没有任何功能可用于检查HDC是否与HGLRC关联 这些是相互联系的唯一功能: HDC GetDC(HWND hWnd) HWND WindowFromDC(HDC hdc) // Depends on wglMakeCurrent()
HGLRC
)。无法使用函数wglGetCurrentContext
,因为我不知道上下文是否绑定到当前线程。如何做到这一点?您可以使用wglGetCurrentContext()
检查当前是否绑定了上下文。但是没有任何功能可用于检查HDC
是否与HGLRC
关联
这些是相互联系的唯一功能:
HDC GetDC(HWND hWnd)
HWND WindowFromDC(HDC hdc)
// Depends on wglMakeCurrent()
HDC wglGetCurrentDC()
HGLRC wglGetCurrentContext()
因此,您需要在创建之后跟踪
HGLRC
。您可以使用wglGetCurrentContext()
检查当前是否绑定了上下文。但是没有任何功能可用于检查HDC
是否与HGLRC
关联
这些是相互联系的唯一功能:
HDC GetDC(HWND hWnd)
HWND WindowFromDC(HDC hdc)
// Depends on wglMakeCurrent()
HDC wglGetCurrentDC()
HGLRC wglGetCurrentContext()
因此,您需要在创建之后跟踪HGLRC
我需要从窗口(或设备上下文)获取OpenGL上下文(HGLRC)
你不能
OpenGL渲染上下文根本不与windows绑定
Windows可以有任意数量的设备上下文。至少有一个主上下文,但可以随时创建其他上下文
OpenGL渲染上下文可以在任何兼容的设备上下文(DC)上激活,但DC和OpenGL上下文之间没有严格的联系。只要任何给定窗口的设备上下文与某个OpenGL上下文兼容,OpenGL上下文就可以在设备上下文上成为当前上下文。稍后,如果需要,可以撤消该连接,并且相同的OpenGL上下文可以在不同窗口的不同DC上变为当前(只要它们兼容)
哦,它也可以反过来工作:您可以有任意数量的线程,每个线程在同一窗口/设备上下文上同时具有不同的OpenGL上下文
windows和OpenGL上下文之间根本没有双射映射
我需要从窗口(或设备上下文)获取OpenGL上下文(HGLRC)
你不能
OpenGL渲染上下文根本不与windows绑定
Windows可以有任意数量的设备上下文。至少有一个主上下文,但可以随时创建其他上下文
OpenGL渲染上下文可以在任何兼容的设备上下文(DC)上激活,但DC和OpenGL上下文之间没有严格的联系。只要任何给定窗口的设备上下文与某个OpenGL上下文兼容,OpenGL上下文就可以在设备上下文上成为当前上下文。稍后,如果需要,可以撤消该连接,并且相同的OpenGL上下文可以在不同窗口的不同DC上变为当前(只要它们兼容)
哦,它也可以反过来工作:您可以有任意数量的线程,每个线程在同一窗口/设备上下文上同时具有不同的OpenGL上下文
windows和OpenGL上下文之间根本没有双射映射。你提问的方式有点像XY问题()。你有问题X,你认为做Y可以帮助你解决X,但你也不知道Y。你为什么要问Y。告诉我们X。你到底想做什么?为什么在这个问题上会有落差票和接近票?这是一个很好的问题。仅仅因为这个问题没有解决方案,这并不意味着它是一个表述错误的问题。如果你深入研究OpenGL窗口系统集成细节,最终会发现这个问题。你有问题X,你认为做Y可以帮助你解决X,但你也不知道Y。你为什么要问Y。告诉我们X。你到底想做什么?为什么在这个问题上会有落差票和接近票?这是一个很好的问题。仅仅因为这个问题没有解决方案,这并不意味着它是一个表述错误的问题。如果您深入研究OpenGL窗口系统集成细节,最终会发现这一点。