您可以在不打开窗口的情况下创建OpenGL上下文吗?

问题描述:

偶尔我碰到了我想获得OpenGL framebuffer对象的地方,但是我对打开任何窗口没有兴趣。您可以在不打开窗口的情况下创建OpenGL上下文吗?

是否有可能创建一个opengl上下文而不附加到任何类型的窗口?

是的!您可以使用桌面窗口作为传递给OpenGL的窗口 - 只要您不尝试在其上显示任何内容;)

只需调用GetDesktopWindow并在创建新的OpenGL窗口时将结果作为参数传递。

+0

这也适用于xorg吗?尝试时似乎很好地打开了上下文,但我没有尝试打开帧缓冲区对象和渲染。 – Cheery 2009-02-23 12:50:25

+0

我知道它也适用于DirectX,但我从未尝试过使用xorg的这个技巧 – 2009-02-23 14:05:34

是的,您可以使用OpenGL执行离屏渲染,但设置的确切方式取决于操作系统。 最接近独立于操作系统的方式是使用Mesa 3D,但那么您的离屏渲染将不会加速。

+0

最后的评论仍然有效吗?如果我理解正确,至少在Linux上,梅萨接近专有驱动程序比较速度。 – 2016-03-15 12:23:23

http://www.opengl.org/wiki/Creating_an_OpenGL_Context

根据这个网页,WGL_ARB_create_context可以用来创建一个没有窗户的上下文。我没有亲自尝试过。我使用freeGLUT来创建上下文,然后在屏幕上渲染到framebuffer +渲染缓冲区。我不用调用glutMainLoop就退出程序。这是klugy,但它适用于我的目的。