我想问一下 Linux 图形堆栈的运作原理以及它们如何协同工作。
到目前为止,我了解到它的工作原理是这样的 - Linux 内核通过 DRM 机制公开 GPU 驱动程序,其中您拥有通用和 GPU/供应商特定的驱动程序。它分为两部分 - 计算和视频输出,称为 KMS。
现在,当Linux启动到VT时,它使用帧缓冲区驱动程序来显示图形。然后,假设您启动 X11 - 它接管并(根据 WM)通过 KMS 显示某些内容。
OpenGL API 通过 ligGL 库公开,该库使用 CPU 进行软件渲染,或者通过 DRM 的计算部分提供硬件加速。
我的问题是关于X11和OpenGL之间的连接。到目前为止,我已经读到应该通过名为 GLX 的 X11 扩展来完成。但我真的很想知道它实际上是如何工作的。据我所知,OpenGL完全独立于X11(或任何其他显示服务器),因此在技术上应该可以使用OpenGL(libGL)计算我的图形,然后将图形数据传递到任何显示服务器,或者,就此而言,甚至是帧缓冲区(当然,大多数时候它实际上是 X11/Wayland 中窗口的帧缓冲区)。
我的问题是我该怎么做,即如何获取 OpenGL 的渲染/输出帧缓冲区并将其传递给其他东西,或者,如果这就是它的工作原理,我如何绑定一些帧缓冲区(例如, X11 窗口的帧缓冲区)到 OpenGL 作为渲染/输出?