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

时间:2011-08-15 08:06:32

标签: c++ opengl wgl

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

我已阅读here您可以使用wglCreateContextAttribsARB创建无窗口上下文,但是它没有解释如何?

3 个答案:

答案 0 :(得分:5)

从链接:

  

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

第二句很重要。来自WGL_ARB_create_context specification

  

4)是否应该有一种方法可以使上下文保持不受约束       它可以同时绘制一个窗口系统吗?

     

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

     

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

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

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

答案 1 :(得分:2)

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

  1. 创建虚拟窗口+ OpenGL上下文以访问扩展
  2. 获取创建PBuffer的功能
  3. 创建PBuffer DC
  4. 在PBuffer上创建一个OpenGL上下文
  5. 销毁虚拟窗口
  6. 另一种选择是使用帧缓冲对象(FBO)来创建常规OpenGL窗口,但不是渲染到主帧缓冲区,而是渲染到帧缓冲区对象缓冲区,而OpenGL窗口则不可见。

答案 2 :(得分:-2)

另外一件事:

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

但是ReleaseDC无法使用它.DeleteDC可以。