我想使用 openGL 的某些功能,但与渲染视觉内容无关。有没有办法在没有任何依赖项的情况下创建它(不是 Windows,也不是某些包 [SDL,SFML,GLUT])?只有允许的库是那些没有外部库的库,就像我使用的 GLEW 一样。
2 回答
您想要做的通常称为离屏渲染。从理论上讲,它是完全有可能的,但是实际的实现有很多警告。在所有主要的高性能实现中最重要的是:即使没有可见的渲染窗口,您仍然需要图形系统运行并处于活动状态,并且您的程序在此图形系统的环境中运行。
在 Windows 上,最直接的方法是创建不可见的窗口,只是您使用CreateWindowEx创建的窗口,但不使用ShowWindow映射;你甚至不需要事件处理循环。在这个窗口中,您像往常一样创建 OpenGL 上下文,但不是渲染到窗口帧缓冲区,而是渲染到帧缓冲区对象。
在 X11/GLX 上它更简单:X11/GLX 提供没有扩展的 PBuffers(Windows 也有 PBuffers,但要创建一个,您首先需要一个常规的 OpenGL 上下文)。所以在 X11 上你可以创建一个没有代理窗口的 PBuffer。PBuffer 本身可以渲染为屏幕外缓冲区;帧缓冲区对象也可以在 PBuffer 中工作,如果实现支持它们的话。与 Windows 一样,使用带有帧缓冲区对象的不可见窗口也可以。无论哪种方式,使用当前驱动程序 X11 必须处于活动状态并且绑定控制台,因此您不能在后台启动额外的 X 服务器并在那里进行离屏渲染,但这只是驱动程序的限制,而不是 X11 、GLX 或 OpenGL。
只有允许的库是那些没有外部库的库,就像我使用的 GLEW 一样。
您可以将 GLEW 静态链接到您的程序。如果你是铁杆,你可以手动加载扩展,但你为什么要这样做呢?