7

如何用最少的代码初始化无窗口的 OpenGL 上下文?

我在这里读过,您可以使用wglCreateContextAttribsARB它来创建无窗口上下文,但是它没有解释如何?

4

3 回答 3

7

从链接:

创建一个没有窗口的上下文,用于离屏渲染。这可能实际上不起作用。

第二句话很重要。来自WGL_ARB_create_context 规范

4) 是否有一种方法可以使上下文成为当前上下文而不同时将其绑定到可绘制的窗口系统?

已解决:是的,但仅限于 OpenGL 3.0 及更高版本。这会导致上下文具有无效的默认帧缓冲区,其含义在 OpenGL 3.0 规范中定义。

注意:显然在 Windows 上,opengl32.dll 使用 drawable 参数来识别驱动程序的命名空间,因此我们可能无法解决它。

该规范不允许您创建没有窗口的上下文,因为它需要您在设备上下文中设置的像素格式。但是理论上你可以在使上下文成为当前上下文时为 HDC 传递 NULL,这会导致 OpenGL 没有默认的帧缓冲区。

但是,如上所述,这实际上可能不起作用。你可以试试看会发生什么,但我不抱希望。

于 2011-08-15T08:31:38.933 回答
5

实现离屏渲染的常用方法是:

  1. 创建一个虚拟窗口 + OpenGL 上下文以访问扩展
  2. 获取创建 PBuffer 的函数
  3. 创建 PBuffer DC
  4. 在 PBuffer 上创建 OpenGL 上下文
  5. 破坏虚拟窗口

另一种选择是使用 Framebuffer Objects (FBO) 创建常规 OpenGL 窗口,但不是渲染到主帧缓冲区,而是渲染到 Framebuffer 对象缓冲区,使 OpenGL 窗口不可见。

于 2011-08-15T18:04:44.077 回答
-3

另一个东西:

HDC  hdc = CreateDC(L"DISPLAY",NULL,NULL,NULL);

ReleaseDC不能使用它。DeleteDC 可以。

于 2017-04-25T15:39:36.183 回答