以X Window为代表的客户/服务器架构。

X Window通常是指X服务器及封装了通信协议的客户端库。服务器端主要负责输入事件的分发,窗口层次的管理,以及显示输出的处理,其它功能基本上都是在客户端实现了。我们看到的各种界面元素都是在客户端绘制的,这一部分通常称为ToolKit,应用程序开发者只需要关注ToolKit就行了。以前的ToolKit非常多,经过多年的进化和淘汰,常用的ToolKit主要是GTK+和QT两个了。X Window是非常复杂和晦涩的,以前我花了不少时间去研究用于嵌入式系统的TinyX,有兴趣的朋友可以看我的博客X Window研究笔记

要注意的是X Window的窗口管理功能是在X服务器里实现的,但窗口管理器却是一个客户端进程。窗口管理器决定了桌面系统的整体风格,窗口管理器进程通过窗口管理协议,发送请求给X服务器,由X服务器执行真正的窗口管理功能。这是X Window七大设计原则中的,提供机制而不是策略的一个体现。这样的好处在于,窗口管理器可以独立发展:比如用于嵌入式系统的窗口管理器和传统PC的窗口管理器之间的差别是很大的,独立出来后就可以开发两个不同的窗口管理器,分别用于不同的场景。

Android上的实现也是客户/服务器架构。但是它和X Window并不完全相同,首先应用程序与服务器使用binder而不是socket作为IPC机制,这主要是出于性能和安全权限控制考虑。其次是窗口管理、渲染输出和输入事件分发是在几个不同的服务里实现的。

以DirectFB为代表的Master/Slave架构。

DirectFB可以单进程运行也可以多进程运行,多进程运行需要各进程之间协作,以防止显示错乱。在多进程运行方式下,DirectFB使用了一个所谓的主从(Master/Slave)模式,它有一个叫Fusion的内核模块,每个DirectFB进程通过文件接口与Fusion模块交换数据,第一个启动的DirectFB进程称为Master,后面的启动的DirectFB进程称为Slave,Master进程一般不能退出,否则Slave进程也会被迫退出。

Master进程负责读取输入设备的输入事件,然后根据情况分发到各个Slave进程。窗口等信息放在共享内存中,窗口管理器通常是作为一个模块在各个进程中,后来DirectFB也支持了独立进程的窗口管理器。

DirectFB说Master/Slave模式与C/S模式相比有更高的性能,但是我觉得真正的性能瓶颈是在界面的绘制上,进程间通信的开销非常小,Master/Slave模式根本没有什么必要。Fusion模块好长时间都没有稳定下来,我被它折腾了好几年,呵呵,现在想起来还有点恼火。

以传统嵌入式GUI为代表的单进程架构。

功能机时代的展讯和MTK的手机平台,以及现在的一些实时操作系统,整个系统都是在一个地址空间运行的,所有应用程序的数据都是共享的,虽然没有明显的创建进程,但是可以把整个系统看作一个进程。GUI在其中一个线程里运行,应用程序只是逻辑上的划分,物理上都是在一个进程中运行,所以他们不需要进程间通讯机制。

在这种架构下,GUI实现相对简单,不需要进程间通讯机制,也不需要加锁(虽然有多个线程,但GUI的访问是串行的),GUI运行效率很高。它的不足在于稳定性存在潜在的问题,就GUI本身来说,因为其简单性而具有更高的稳定性,但是由于全部应用程序共享同一个内存地址空间,某个应用程序崩溃掉会导致整个系统崩溃。不过这不是GUI的问题,而是系统的问题。

以前我写的嵌入式GUI FTK就是单线程的,这样做的主要原因是:1.FTK是为嵌入式系统开发的,所以希望能兼容各种实时操作系统。2.希望做得简单些,适用于轻量级的应用,没有必要搞的像GTK+那样强大。3.尝试一种新的架构,全部有界面的应用程序都在一个进程中运行,其它服务器在后台运行,彻底分离界面与逻辑。

基于浏览器HTML5 Canvas的GUI。

创新高性能移动UI框架——Canvas UI 框架认为Canvas UI是HTML5 APP的界面发展趋势,我在几年前就认为Canvas UI才是HTML5 APP的未来,所以花了大量时间去开发CanTKAppBuilder/GameBuilder

基于浏览器HTML5 Canvas的GUI的架构类似于单进程的架构,主要区别有:

  • 浏览器已经封装了输入设备,GUI不要从输入设备里读取事件,只需要注册相应的回调函数即可。

  • 浏览器已经实现了主循环,GUI可以通过requestAnimationFrame注册回调函数。

  • GUI无法直接唤起输入法,只能通过input元素来模拟,也就不需要去实现编辑器控件。

  • GUI 不需要自己实现基本的绘图操作,Canvas已经提供了强大绘图操作。

  • 不需要太关心跨平台的东西(各个浏览器存在兼容性的问题,还好Canvas的API差异不大)。

不同的GUI的架构适用于不同的情况,需要根据实际情况选用。对于大多数人来说,去实现一个完整的GUI的机会不多,了解一下就够了。

游戏引擎/GUI的设计与实现-常见GUI架构的更多相关文章

  1. 刺猬大作战(游戏引擎用Free Pascal写成,GUI用C++写成,使用SDL和Qt4)

    游戏特性[编辑] 游戏引擎用Free Pascal写成,GUI用C++写成,使用SDL和Qt4[2]. 0.9.12开始支持实时动态缩放游戏画面. 个性化[编辑] 刺猬大作战有着高度定制性 游戏模式: ...

  2. 游戏引擎/GUI的设计与实现-序

    几年前写<嵌入式GUI FTK设计与实现>,没写几篇就停止更新了.当时自己研究过MicroWindows, X Window, DirectFB, GTK+和Android的GUI,又写过 ...

  3. 八款常见的Android游戏引擎

    原文地址:http://bbs.csdn.net/topics/380203732 1.Angle  Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGL  ...

  4. 《Genesis-3D开源游戏引擎-FQA常见问题解答》2014年01月10号版本

    1.Genesis-3D开源游戏引擎主要面向哪些用户人群?有限制吗? 1.我们的引擎没有限制,只要您想了解和使用我们的引擎,就可以加入Genesis-3D的大家庭.2.我们的主要用户群是各个相关的企业 ...

  5. 开源战棋 SLG 游戏框架设计思考(一)简介和游戏引擎

    战棋 SLG 游戏 SLG(Simulation Game)游戏是模拟游戏的简称.战棋类的SLG有两种:一种是 War Game 中的兵棋推演分支,常见的游戏有战争艺术3(TOAW3 — The Op ...

  6. Galaxy2D游戏引擎常见问题解答

    ◆Galaxy2D游戏引擎开源吗?    Galaxy2D游戏引擎不开源. ◆Galaxy2D相对HGE有何优点?    Galaxy2D相对HGE有以下优点:     (1)自带音频播放功能,HGE ...

  7. 3D游戏引擎设计 实时计算机图形学的应用方法 第2版 pdf 带索引书签目录

    3D游戏引擎设计  实时计算机图形学的应用方法  第2版 目录 第1章 概述1.1 图形硬件和游戏发展史1.2 本书版本与软件发展史1.3 章节导读 第2章 图形系统2.1 基础知识2.1.1 坐标系 ...

  8. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  9. 转载:[转]如何学好3D游戏引擎编程

      [转]如何学好3D游戏引擎编程 Albert 本帖被 gamengines 从 游戏引擎(Game Engine) 此文为转载,但是值得一看. 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的 ...

随机推荐

  1. qt中信号与槽机制

    一. 简介 就我个人来理解,信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁. 信号和槽机制是 Qt 的核心机制,可以让编程人员将互不 ...

  2. 一、java环境搭建

    结论: 1.jdk包括jre,jre包括jvm. 2.eclipse ide依赖环境变量.如果未设置,在启动eclipse工具会提示:返回码是13.

  3. SqlSever基础 where 与 group by组合起来 处理数据

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  4. 三HttpServletResponse对象介绍(1)

    转载自http://www.cnblogs.com/xdp-gacl/p/3789624.html Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象 ...

  5. bzoj 3118: Orz the MST(单纯形)

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3118 题意:给出一个图以及图中指定的n-1条边组成的生成树.每条边权值加1或者减去 ...

  6. BZOJ 1822 Frozen Nova 冷冻波(最大流)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1822 题意:WJJ喜欢“魔兽争霸”这个游戏.在 游戏中,巫妖是一种强大的英雄,它的技能F ...

  7. 3DES 加解密

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Comm ...

  8. windows下安装zabbix_agents_2.2.0

    下载与解压 下载zabbix_agents_2.2.0 http://www.zabbix.com/downloads/2.2.0/zabbix_agents_2.2.0.win.zip 解压到C盘下 ...

  9. SQL判断临时表是否存在

    IF EXISTS(select * from tempdb..sysobjects where id=object_id('tempdb..#tb')) BEGIN DROP TABLE #tb E ...

  10. getting started with Baxter Research Robot

    1. Baxter Research Robot Baxter Research Robot is from Rethink Robotics. There is also a video on TE ...