×

Clutter 在Linux 中的探究

消耗积分:1 | 格式:rar | 大小:0.6 MB | 2017-10-19

分享资料个

  1 引言

  目前,三维用户图形界面已成为移动嵌入式设备的一个

  新的发展趋势。三维用户图形界面的实现依赖于嵌入式软件

  平台中的 3D 图形库。目前,嵌入式 3D 图形库已有业界的工

  业标准 OpenGL ES,它是专门为嵌入式设备设计的跨平台的

  三维图形 API 标准,是 Khronos 协会从 OpenGL 裁剪定制而来

  的。基于 OpenGL ES 的 API 来开发应用程序,需要熟悉复杂

  的图形 API 和丰富的数学知识,具有一定的难度。为了能够

  快速简单地开发三维应用,OpenedHand 公司开发了一个开源

  UI 图形库 Clutter。

  Clutter 用于创建快速、视觉效果丰富、支持三维图形和动

  画效果的用户图形程序。Clutter 仍然使用 OpenGL ES 作为底

  层的图形渲染库,但是向开发者屏蔽了 GL 的 API,对其复杂

  接口进行了封装。与 OpenGL ES 相比,Clutter 的 API 易用、

  高效、并且具有很大的灵活性。

  2 Clutter 的系统设计

  Clutter 的系统架构可以分为 3 个层次:核心模块、后端实

  现以及系统平台支持,如图 1 所示。Clutter 的核心模块包括界

  面元素模块 UI elements、GL 抽象层 COGL、UI 脚本模块 JSon

  以及事件处理模块 Event Loop。Clutter 的后端实现层是指

  Clutter 与窗口系统 X11 以及 EGL 的集成部分。系统平台支持

  层是指 Clutter 对系统平台的依赖部分,包括 OpenGL ES,

  EGL,以及 X Window 等。

  界面元素GL 抽象库事件处理UI 描述脚本Clutter

  UI elementsCOGLEvent LoopJSon核心模块

  Clutter-EglX 后端Clutter-X11 后端Clutter

  后端实现

  OpenGL ESEGLX11Pango系统平台

  2.1 界面元素模块

  Clutter 的绘图模型采用的是基于场景图的保留模式。场

  景具有三维空间,场景中的每个对象都代表了三维空间中的

  一个二维曲面,采用二维图形来表达三维效果。场景图的顶

  层容器称为 Stage,场景图中的基本界面元素称为 Actor。Stage

  就是一个预设的三维空间。标准的 Actor 具有 2D 形状,能够

  在三维空间进行缩放、旋转、部分透明等变换。

  可以将多个 Actor 组合成一个 Group,然后对这个 Group

  作变换时,Group 中的所有 Actor 就会跟着一起改变,相当的

  方便。多个 Group 还可以再组合成另一个 group 里,这样可以

  很方便去设计一些动画。

  2.2 GL 抽象层

  COGL 是 Clutter 定义的一个 GL 的抽象库,它提供了一套

  通用的渲染 API,对 OpenGL 1.4 及更高版本, OpenGL ES 1.1

  和 OpenGL ES 2.0 进行了封装。其目的是增强 Clutter 在各个

  OpenGL 和 OpenGL ES 版本之间的可移植性。

  2.3 基于脚本的 UI 描述

  JSon 是 Clutter 提供的一种描述用户图形界面的脚本语言,

  它的语法源自 JSON (JavaScript Objective Notation)。JSon 所描

  述的每一个 UI 元素都称之为对象。JSon 支持的对象类型十分

  广泛,不仅包括所有的 Actor 和 Container,还支持 Behavior 对

  象。应用程序动态加载 JSon 描述文件并获取其中的对象,来

  构建 UI 图形界面。

  2.4 Clutter 的后端实现

  Clutter 作为一个 GUI 图形库,必须和底层的窗口系统集

  成。目前,Clutter 提供了基于 X Window 的实现:Clutter-X11

  后端和 Clutter-eglx 后端。Clutter 后端对象的继承关系如图 2Clutter 在Linux 中的探究

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !