2011-08-15 95 views

回答

5

从链接:

创建无窗口背景下,离屏渲染。这可能不实际工作。

这第二句话是很重要的。从WGL_ARB_create_context specification

4)如果有一种方法,使上下文电流而不同时结合 到一个窗口系统可绘制的?

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

注:显然在Windows上,OPENGL32.DLL利用提拉 论证,以确定驾驶员的命名空间,所以我们可能不 能够解决它。

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

但是,正如上面所指出的,这可能不是实际工作。你可以试着看看会发生什么,但我不会让自己的希望上升。

+0

感谢您的回答。那么创建无窗口环境的最简单的方法是什么? – ronag

+0

另一个尝试将使用屏幕DC(传递NULL到* GetDC *例程)。 – Luca

+1

@Luca:你不能设置根/屏幕窗口的PIXELFORMATDESCRIPTOR! OpenGL上下文必须具有可兼容的像素格式。因此,你的建议是非常糟糕的建议。 – datenwolf

2

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

  1. 创建一个虚拟窗口+ OpenGL上下文以访问扩展
  2. 获取函数创建一个p缓冲器
  3. 创建p缓冲器DC
  4. 在PBuffer上创建OpenGL上下文
  5. 销毁虚拟窗口

另一种选择是使用由创建常规OpenGL窗口帧缓冲对象(FBO),但不是渲染到主帧缓冲区渲染到帧缓冲区对象缓存,并有人看不见OpenGL窗口。

+1

对于初学者来说,有可能有代码段? – user377178

-1

另一个东西:

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

ReleaseDC不it.DeleteDC确实工作。

+0

“不起作用”是什么意思? 'ReleaseDC'和'DeleteDC'不是对等的,它们的用途完全不同。 – BDL