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

标签 windows user-interface opengl drawing openglcontext

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

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

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

基本上我的问题是,在我收到“绘制”事件的情况下,我尝试创建 OpenGL 上下文的频率如何?这与设备上下文的创建/销毁周期有何关系?

最佳答案

一般来说,将单个 OpenGL 上下文视为一个窗口通常是安全的,尤其是在 Windows 上。

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

通常,您将在应用程序的整个运行时重复使用此设备上下文。如果要呈现到不同的窗口,则需要为新窗口句柄生成设备上下文 (HDC)。此外,离屏渲染有点不同,因为您还需要为此创建一个兼容的设备上下文。

关于您的问题:

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

2) 您将希望始终使用为您正在呈现的窗口创建的设备上下文。

关于windows - OpenGL 上下文和设备上下文如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/878452/

相关文章:

windows - Windows 上的 Ack.vim "No such file or directory"错误

java - 如何在没有互联网的情况下在javascript中处理谷歌地图API

c++ - 将任意数量值的顶点数组传递给 GLSL 顶点着色器

java - 主线程 AWTAnimator 尚不支持 JOGL Immutable glNamedBufferStorage

windows - 获取 DOS 路径而不是 Windows 路径

Java、Mac 操作系统、Windows 和 Linux

windows - 对于触摸屏界面,您会使用哪个 GUI 工具包?

flutter - 如何在Flutter中制作自定义按钮形状

delphi - Delphi 7 中的四舍五入和标题为 "TPanel"

c++ - 在 OpenGL 中渲染一组三角形结构引用