Dan*_*len 1 opengl user-interface xlib
我最近在大学里一直在学习 OpenGL,并自己搜索了像 Qt 这样的 C++ 中的 Windows 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”指的是按钮、文本框和窗口生成等。注 2:我在 Linux 上运行。
Xlib 是 X11 协议的传统客户端实现。现代(替代 Xlib)客户端实现将是Xcb,但是 OpenGL/GLX 与Xcb一起使用有点麻烦。X11与 Microsoft Windows无关。Xlib/Xcb 本质上是将函数调用转换为发送到 X11 服务器的命令流的协议实现。例如,这些命令之一是“从点 (x0,y0) 到点 (x1,y1) 用黑色绘制一条线”。
在 Microsoft Windows 上,底层图形系统是 GDI。它的功能与 X11 相似,但是程序直接调用它,而不是像 X11 那样通过序列化的命令协议进行对话。
Qt不是建立在 Xlib 之上,也不是建立在 Xcb 之上。相反,X11 是可以与 Qt 一起使用的可能的图形后端之一。如果在 Microsoft Windows 上运行,Qt(以及 OpenGL)使用的后端是GDI,当涉及到 OpenGL 时,有一些 GDI 函数,形成WGL API的集合。WGL 之于 GDI 就像 GLX 之于 X11。
OpenGL 上下文是使用特定于图形系统的 API 创建的:X11 上的 GLX、Microsoft Windows 上的 WGL、MacOS X 上的 CGL。 OpenGL 上下文可以在drawable上变为当前,它通常是底层图形系统的窗口。然后 OpenGL 调用通过图形系统或绕过它直接发送到图形驱动程序。
此外,OpenGL不在GPU 上运行。OpenGL 是一个 API,API 调用最终会进入图形驱动程序,然后图形驱动程序与 GPU 对话,将 OpenGL 调用转换为 GPU 命令缓冲区,然后传输到 GPU 并在那里执行。
简而言之,LibX 是如何实现其 GUI 元素的,是通过 openGL 还是其他方式?
它将普通的 X11 绘图命令发送到 X 服务器。GUI 工具包可以利用 X11 或 OpenGL 提供的图形基元来绘制漂亮的小部件。