2

我想使用 openGL 的某些功能,但与渲染视觉内容无关。有没有办法在没有任何依赖项的情况下创建它(不是 Windows,也不是某些包 [SDL,SFML,GLUT])?只有允许的库是那些没有外部库的库,就像我使用的 GLEW 一样。

4

2 回答 2

5

您想要做的通常称为离屏渲染。从理论上讲,它是完全有可能的,但是实际的实现有很多警告。在所有主要的高性能实现中最重要的是:即使没有可见的渲染窗口,您仍然需要图形系统运行并处于活动状态,并且您的程序在此图形系统的环境中运行。

在 Windows 上,最直接的方法是创建不可见的窗口,只是您使用CreateWindowEx创建的窗口,但不使用ShowWindow映射;你甚至不需要事件处理循环。在这个窗口中,您像往常一样创建 OpenGL 上下文,但不是渲染到窗口帧缓冲区,而是渲染到帧缓冲区对象。

在 X11/GLX 上它更简单:X11/GLX 提供没有扩展的 PBuffers(Windows 也有 PBuffers,但要创建一个,您首先需要一个常规的 OpenGL 上下文)。所以在 X11 上你可以创建一个没有代理窗口的 PBuffer。PBuffer 本身可以渲染为屏幕外缓冲区;帧缓冲区对象也可以在 PBuffer 中工作,如果实现支持它们的话。与 Windows 一样,使用带有帧缓冲区对象的不可见窗口也可以。无论哪种方式,使用当前驱动程序 X11 必须处于活动状态并且绑定控制台,因此您不能在后台启动额外的 X 服务器并在那里进行离屏渲染,但这只是驱动程序的限制,而不是 X11 、GLX 或 OpenGL。

只有允许的库是那些没有外部库的库,就像我使用的 GLEW 一样。

您可以将 GLEW 静态链接到您的程序。如果你是铁杆,你可以手动加载扩展,但你为什么要这样做呢?

于 2011-09-24T19:26:12.720 回答
1

什么是可以静态链接并可以创建上下文的最轻量级的跨平台库。

你如何定义“最轻”?

除了创建 OpenGL 窗口之外,做最少的两个跨平台库是FreeGLUTGLFW

FreeGLUT 有大约 5.2MB 的发行版(解压后),而 GLFW 有 2.6MB 的发行版。这会让它“更轻”吗?FreeGLUT编译好的静态库,VS2008下release模式,500KB左右;类似编译下的 GLFW 是 120KB。这会让它“更轻”吗?

于 2011-09-24T19:35:45.130 回答