Xlib和GLX

本文介绍了Linux下的GUI系统X11的工作原理及其组成部分,包括XServer、XLib、WindowManager等,并概述了X11的发展历程及其实现XFree86与X.Org服务器之间的演变。

Linux广泛使用X Windows系统作为GUI系统。X11是1987年提出的X Windows版本。

X11基于CS模型,位图显示。Server管理硬件的输入输出,即提供显示服务,捕获用户输入。所有使用该服务的应用程序被视作Client。

X11没有规范Client的视窗样式,这些由用户软件自己定义。


Linux <----> X Server <----> XLib <----> X Application


Xfree和Xorg实现了X Server。XLib为Client提供了与Server通信的通用接口

X Application: GTK+ <----> Gnome

X Application: QT <----> KDE

X Application: X APP


Gnome和KDE实现了Window Manager。

GTK+是Gnome的默认图形库,基于XLib;

QT是KDE的默认图形库,基于XLib;

wxWidgets图形库;

Swing/AWT是Java使用的图形库;

MFC是windows的图形库;


XFree86是 X Window系统的一个实现。自1992年至2004年,它一直循著自由发放的开放源代码模式发展,成为X Window系统最被广泛使用的基建平台。2004年,XFree86的开发因软件许可证出现分岐,而衍生出另一个发展自XFree86 4.4 RC2 版本源代码,名叫X.Org 服务器的XWindow系统。XFree86不再以GPL软件许可证的形式出现,而是使用XFree86®Project 公司所拥有的XFree86 License version 1.1软件许可证模式发放。现时 XFree86仍由 XFree86®Project公司负责开发,该公司的主要负责人是 DavidDawes。

Xorg服务器的第一个版本X11R6.7.0,从XFree86 4.4 RC2派生出来。大部分的XFree86开发者也由于不满许可的更改转而从事X.org这个比XFree86更开放的项目。XOrg服务器逐渐在开源Unix风格操作系统中流行。它被以下发行版本采用以代替XFree86:Gentoo Linux, Fedora Core, Slackware, SUSE, Mandrake Linux, Cygwin/X, Debian GNU/Linux, Ubuntu Linux, OpenBSD 和 FreeBSD 5.x。


启动X server:startx

关闭X server:sudo /etc/init.d/lightdm stop


Xlib常用编程路线图

1. 连接X Server: Display = XOpenDisplay()

2. 创建窗口:win = XCreateSimpleWindow(Display, ...)

3. 显示窗口:XMapWindow(win)

4. 事件循环。



在提供的引用中未涉及glx engine的相关内容,以下是基于通用知识的介绍。 ### 功能 GLX(OpenGL Extension to the X Window System)本身并非一个传统意义上像Unreal Engine那样完整的游戏引擎,而是一个用于在X Window系统上实现OpenGL渲染的扩展协议。其主要功能是允许应用程序通过X服务器在远程或本地的图形硬件上进行OpenGL渲染。这使得开发者可以在基于X Window系统的环境(如众多Linux桌面环境)中开发运行使用OpenGL的图形应用程序,包括游戏、图形设计软件、科学可视化工具等。 ### 使用方法 在使用GLX进行开发时,开发者通常需要进行以下步骤: 1. **初始化X连接**:使用Xlib库建立与X服务器的连接。 ```c #include <X11/Xlib.h> Display *display = XOpenDisplay(NULL); ``` 2. **创建GLX上下文**:GLX上下文包含了OpenGL的状态信息,如当前的渲染模式、纹理、着色器等。 ```c #include <GL/glx.h> XVisualInfo *visual_info = glXChooseVisual(display, screen, attribs); GLXContext context = glXCreateContext(display, visual_info, NULL, GL_TRUE); ``` 3. **绑定上下文**:将创建的GLX上下文绑定到当前的X窗口上,以便进行渲染。 ```c glXMakeCurrent(display, window, context); ``` 4. **进行OpenGL渲染**:使用OpenGL的函数进行图形绘制。 ```c glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(-0.5f, -0.5f); glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(0.5f, -0.5f); glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(0.0f, 0.5f); glEnd(); glFlush(); ``` 5. **释放资源**:在程序结束时,释放GLX上下文X连接。 ```c glXMakeCurrent(display, None, NULL); glXDestroyContext(display, context); XCloseDisplay(display); ``` ### 特点 - **跨平台兼容性**:由于基于X Window系统,GLX可以在众多支持X Window的操作系统上使用,主要是各种Linux发行版其他类Unix系统,具有较好的跨平台性。 - **与OpenGL集成紧密**:作为OpenGL在X Window系统上的扩展,GLX与OpenGL的结合非常紧密,能够充分发挥OpenGL的图形渲染能力。 - **远程渲染支持**:GLX允许应用程序通过X服务器在远程的图形硬件上进行渲染,这在分布式计算远程办公等场景中非常有用。 ### 局限性 - **依赖X Window系统**:GLX的使用依赖于X Window系统,这限制了它在非X Window环境(如Windows、macOS等)中的使用。 - **性能问题**:在远程渲染时,由于需要通过X服务器传输大量的图形数据,可能会导致性能下降。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值