Windows Gui 与 OpenGL 的关系

Windows Gui and OpenGL relationship

我最近在大学学习 OpenGL,并自行搜索了 Windows 像 Qt 这样的 c++ GUI 编程。我什至更深入地找到了 Windows GUI 的 XLib。但是我还是不太明白。

我知道 Qt 是建立在 XLib 之上的。为了实现 OpenGL,我需要通过一些库(如 GLUT)来定义上下文。据我了解,GLUT 基本上是一个通过称为 GLX 的东西连接 XLib 和 OpenGL 的库。

我还了解到 OpenGL 在 GPU 上运行,并且 XLib 嵌入到操作系统中。那么当操作系统安装在没有 GPU 的计算机上时会发生什么。据我所知它会起作用。这是否意味着 XLib 不依赖 OpenGL 来绘制 Windows 等等?如果有,它依赖于什么?或者它可能通过某些驱动程序逐个像素地绘制它。

简而言之,LibX 是如何实现其 GUI 元素的,是通过 openGL 还是其他方式?

注 1:我指的是 'Windows GUI' 按钮、文本框和 window 代等。 注 2:我 运行 在 Linux。

Xlib 是 X11 协议的传统客户端实现。现代(Xlib 的替代)客户端实现将是 Xcb,但是 OpenGL/GLX 与 Xcb 一起使用有点麻烦. X11 与 Microsoft 没有任何关系 Windows。 Xlib/Xcb 本质上是将函数调用转换为发送到 X11 服务器的命令流的协议实现。例如,这些命令之一是 "draw a line with the color black from point (x0,y0) to point (x1,y1)".

在 Microsoft Windows 上,底层图形系统是 GDI。它的功能与 X11 相似,但程序直接调用它,而不是像 X11 那样通过序列化命令协议进行对话。

Qt 不是建立在 Xlib 或 Xcb 之上。相反,X11 是可以与 Qt 一起使用的可能的图形后端之一。如果 运行ning on Microsoft Windows Qt(顺便说一下 OpenGL)使用的后端是 GDI,当涉及到 OpenGL 时,有一些 GDI 函数,形成 WGL API 的集合。 WGL 之于 GDI 就像 GLX 之于 X11。

OpenGL 上下文是使用特定的图形系统创建的 API:X11 上的 GLX,Microsoft 上的 WGL Windows,MacOS X 上的 CGL。OpenGL 上下文可以在 drawable,通常是底层图形系统的window。然后 OpenGL 调用要么通过图形系统发送,要么绕过它直接发送到图形驱动程序。

此外,OpenGL 不在 GPU 上 运行。 OpenGL 是一个 API,API 调用最终转到图形驱动程序,然后图形驱动程序与 GPU 对话,将 OpenGL 调用转换为 GPU 命令缓冲区,然后传输到 GPU 并在那里执行。

In short, how does LibX implement its GUI elements, is it through openGL or something else?

它向 X 服务器发送纯 X11 绘图命令。 GUI 工具包可以利用 X11 或 OpenGL 提供的图形基元来绘制漂亮的小部件。