最小的无窗口OpenGL上下文初始化

ron*_*nag 7 c++ opengl wgl

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

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

Nic*_*las 7

从链接:

在没有窗口的情况下创建上下文,用于屏幕外渲染.这可能实际上不起作用.

第二句很重要.从WGL_ARB_create_context规范:

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

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

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

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

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


dat*_*olf 5

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

  1. 创建一个虚拟窗口+ OpenGL上下文以访问扩展
  2. 获取创建PBuffer的功能
  3. 创建一个PBuffer DC
  4. 在PBuffer上创建OpenGL上下文
  5. 销毁虚拟窗口

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