图形用户界面介绍

1. 介绍

UI,User Interface,即用户界面,是系统和用户之间进行交互和信息交换的媒介,也即计算机操作用户接口
GUI,Graphical User Interface,即图形用户界面,是指采用图形方式显示的计算机操作用户接口

GUI在不同操作系统上的实现均不同

 - Windows:   APP -> GDI -> DDI -> Hardware 
 - Linux:     APP -> X Windows -> X Server -> 图形驱动 -> Hardware 
 - Mac OS X:  APP -> Quartz –> Darwin -> Hardware

2. 图形驱动

这里主要介绍Linux上图形驱动方式/底层支持库

 - VGA
 - Framebuffer
 - DirectFB
 - X Window

2.1 VGA

VGA是Video Graphics Array的缩写,是指640×480分辨率的显示标准
它是显卡制造商所共同支持的一个低标准,直接对显卡上的寄存器操作,这种方式的移植性很差,速度也比较慢

SVGALib是VGA驱动函数库,提供了控制台上的图形(Graphic Console)编程接口

2.2 Framebuffer

Framebuffer设备提供了显卡的抽象描述,同时代表了显卡上的显存
用户进程通过对FrameBuffer设备(/dev/fbN)操作来完成直接对屏幕的操作

FrameBuffer默认就编译进了Linux内核,它也提供了控制台上的图形(Graphic Console)编程接口

更多内容可参考:
<Framebuffer HOWTO>
<Linux驱动修炼之道-framebuffer>
<Framebuffer原理、使用、测试系列>

2.3 DirectFB

DirectFB是一个轻量级的提供硬件图形加速,输入设备处理和抽象的图形库,基于Framebuffer运行

DirectFB是为嵌入式系统而设计,它是以最小的资源开销来实现最高的硬件加速性能

2.4 X Window

X Window通过软件工具及架构协议来创建操作系统所用的图形用户界面,包括了工具包及架构规范;目前最流行的则是X.Org所用的协议版本为X11

下图将X Window的整个架构完整地描述了出来

Xlib

从图中可以看出,X Window是一种客户机/服务器模型,它们之间则通过X Protocol来进行通信

X Server运行在有键盘、显示器、鼠标的计算机上,用来管理显示信息,处理键盘和鼠标输入;而每个应用程序就是一个X Client;Client给Server发送信息,Server则进行处理如绘制图形

X Server: 由XFree86, X.org提供了支持
X Client:  由Xlib提供支持库,再经过封装成GUI Toolkit或者Widget ToolKits(如GTK+,Qt),供上层应用程序使用

值得一说的是,Wayland是一个规定显示服务器与其客户机之间通信方式的协议,用以取代X Window System

参考:
<FreeBSD X Window>
<OpenGroup X Window System>

3. 高级图形库

3.1 Xlib

在X Window中进行图形编程,可以选择使用Xlib;Xlib实际上是对底层X协议的封装,可通过该函数库进行一般的图形输出

但是Xlib的接口太原始而且复杂,因此一般的图形程序选择其他高级一些的图形库作为基础,比如GTK、QT、FLTK等

3.2 SDL

SDL即Simple DirectMedia Layer,是一个跨平台的多媒体游戏支持库,包含了对图形、声音、游戏杆、线程的支持,可以运行在X Window、FrameBuffer、SVGALib,DirectX、BeOS等平台上

SDL是专门为游戏和多媒体应用而设计开发,所以它对图形的支持非常优秀,尤其是高级图形能力

3.3 Mesa3D

Mesa3D是一个兼容OpenGL规范的开放源码函数库,同时也是一个跨平台的函数库,能够运行在X Window、BeOS、SVGALib等平台上

OpenGL定义了跨编程语言、跨平台的API规格,用于生成2D/3D图形

3.4 其他图形库

Cairo: 一个2D图形库
FLTK: 一种使用C++开发的跨平台GUI工具包
NxWidgets: 是NuttX实时嵌入式操作系统的GUI图形用户界面包

参考:
<The Xlib Manual>
<Graphical User Interface Elements>
<基于GTK+和X-window的GUI在嵌入式Linux中的应用>

原文地址:https://www.cnblogs.com/hzl6255/p/3331670.html