OpenGL上下文和设备上下文如何工作?

2 windows opengl user-interface drawing openglcontext

我是U/I编程的新手,我正在尝试使用OpenGL.当我运行一个用GLUT创建一个新的OpenGL窗口的示例程序时,它工作正常.好.但是,在另一个程序的上下文中,我必须响应Draw事件(在Windows上),传递给我的设备上下文 - 以及我可能没有GLUT可用的地方 - 我的困惑是:

  1. 什么时候创建和销毁设备上下文?我可以绘制给我的任何设备上下文,或只有其中一些(我怎么知道)?

  2. 我是否必须创建自己的OpenGL上下文并使用它来绘制,或者我可以使用"当前"的OpenGL上下文?每次发送绘制事件时,是否必须重新创建上下文?

基本上我的问题是,鉴于我被发送"Draw"事件的情况,我多久尝试创建一次OpenGL上下文,以及这与设备上下文的创建/销毁周期有何关系?

Ree*_*sey 7

通常,将单个OpenGL上下文视为窗口通常是安全的,尤其是在Windows上.

设备上下文将(通常)映射到窗口句柄(HWND).它实际上是一个DC(HDC是句柄),但通常你将一个HDC与一个HWND相关联.在Windows中,您将基于要渲染的屏幕上的窗口创建要使用的窗口.

通常,您将为应用程序的整个运行时重用此设备上下文.如果要渲染到不同的窗口,则需要为新窗口句柄生成设备上下文(HDC).此外,屏幕外渲染也有所不同,因为您也为此创建了兼容的设备上下文.

至于你的问题:

1)当您创建要进行渲染的窗口时,您将获取设备上下文,并在该窗口的生命周期中使用它.

2)您将希望始终使用为要渲染的窗口创建的设备上下文.