zoukankan      html  css  js  c++  java
  • 图形用户界面介绍

    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中的应用>

  • 相关阅读:
    【转】VC 隐藏模块、MFC 改变窗口类名
    【转】Reason: The specified virtual disk needs repair.
    关于CreateProcess函数一些经验
    利用NtQuerySystemInformation函数遍历进程,遍历线程,获取线程挂起或运行状态
    uefi安装win7,deepin15双系统后grub没有windows选项
    X64下的虚拟地址到物理地址的转换
    WinDBG 技巧:列出模块(DLL/EXE)里面所有的符号(symbol)
    windows7内核分析之x86&x64第二章系统调用
    使用VS Code写PHP并进行调试
    使用CreateProcess创建新的process 并返回process运行结束返回值
  • 原文地址:https://www.cnblogs.com/hzl6255/p/3331670.html
Copyright © 2011-2022 走看看