将 OpenGL 渲染到屏幕外帧缓冲区时,是否还需要窗口系统支持?

When rendering OpenGL to offscreen framebuffer, is windowing system support still needed?

如果我只想使用 OpenGL 函数进行一些渲染,甚至不需要创建 window。我是否仍需要使用像 glx 这样的库来将 OpenGL 与平台 windowing 系统绑定?

如果我不需要,那么OpenGL上下文在哪里创建?因为我需要使用像 glXCreateContext 这样的函数来创建 OpenGL 上下文。但如果我没记错的话,每个 OpenGL 程序都需要一个上下文。所以好像有点矛盾?

希望有人能为我澄清一下。

OpenGL 本身(规范)对window 系统集成 以及在何处以及如何获取渲染上下文没有强加任何要求。 OpenGL 实现提供 off-screen 上下文创建是完全合法的。实际问题是:哪些 OpenGL 实现执行此操作以及 API 是什么。

在 Linux 上 DRI/DRM/Mesa 一个 window 可以使用 GBM API/library 在 KMS 上创建无屏幕 OpenGL 上下文支持的 GPU。

Mesa 也有一个 Off-Screen-Mesa 变体 (OSMesa),但目前它只进行基于软件的渲染(llvmpipe 或 softpipe),但它可能会在以后添加 GPU 支持。

EGL(用于上下文管理的 Khronos 跨平台 API)还提供 windowless/screenless 上下文创建选项,驱动程序支持这些选项是可选的。至少 NVidia 专有驱动程序支持它:https://devblogs.nvidia.com/parallelforall/egl-eye-opengl-visualization-without-x-server/