初探Mobile Linux上GL/ES等 3D APP与XServer的关系。

众所周知,Mobile Linux上的3D APP是基于OpenGL,或者OpenGL ES,后者是前者面向嵌入式设备的一个简化版本。目前基于是OpenGL/ES上的一个图形封装类库Clutter也渐渐为人们所熟知。这些都是众所周知的废话,下面想探讨的是基于OPENGL/ES等 3D APP与Linux原来的面向2D的X Server是什么关系?


当然不是吃饱了撑着平白无故想这个问题,对这个问题的疑惑来自于Moblin平台上的Clutter Destop上一个GTK程序调用gtk_widget_show时的CoreDump问题,该GTK程序在Gnome Destop下运行正常。于是想,是不是3D的UI仍然依赖于XServer?


想深一层:Linux原有的XServer系统会接管屏幕的各种输入事件,例如,键盘、鼠标、触摸屏,其配置放在Xorg.conf中。这一点从Xerver的原理图及维基百科上对Xserver的描述可以了解到。an X server communicates with various client programs. The server accepts requests for graphical output (windows) and sends back user input (from keyboard, mouse, or touchscreen). 如果3D的应用不挂在XServer上,用户的输入事件如何到达应用?

 

XServer原理图

在网上查找资料的时候发现了台湾黄敬群大牛的讲解的PPT《支援硬体加速的OPENGL/ES实做》,该大牛不愧为敬业乐群的好名字,技术精湛,乐于分享,读后深有启发。


GLX (OpenGL Extension to the X Window System)为X Windows System提供Open GL的扩展。因此3D的APP不是抛离X Server,而是与之共存。下图是敬群大牛PPT中GLX的图。

 

glx

GLX包含了下面的内容:


1、X Window System application中的OpenGL API扩展

2、X 协议的扩展, 上图中的除了原有的Xpackets,新扩展一种GLX Packets。使客户端(the OpenGL application)发送 3D 渲染命令给 X server (the software responsible for the display)。 我的理解是,原有的X 协议不变基础上添加新的GLX扩展,因此,原有的用户事件输入处理流程是不变的。

3、X server的功能扩展,使之可以接收渲染命令。 (如果无硬件加速的OpenGL类库则使用 Mesa 类库)。


如果X Window System application和X server运行在同一台机器上,并且3D加速的图形卡及驱动能够支持,可以使用DRI(Direct Rendering Infrastructure)直接访问图形硬件设备。


直接的3D图形渲染和间接的3D图形渲染。如下图所示:

3D的直接渲染与间接渲染

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值