热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MiniGUI的帧缓冲技术、图形渲染引擎与输入处理机制

在整理旧文件时,发现了几篇关于2011年MiniGUI技术的博客,虽然内容已显陈旧,但仍然具有一定的参考价值。这些文章详细探讨了MiniGUI的帧缓冲技术、图形渲染引擎以及输入处理机制,为理解早期嵌入式系统的图形界面开发提供了宝贵资料。

清理硬盘时发现有几篇2011年整理的博客躺在那里,删了怪可惜的,发上来保存一下~~

年代久远,已经过时,仅作参考用途~~~


FrameBuffer:

帧缓冲是一种驱动程序接口。FrameBuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过FrameBuffer的读写直接对显存进行操作。用户可以将FrameBuffer看成是显示内存的一个映像,将其映射到进程地址空间后,可以直接进行读写操作,而且写操作可以立即反应在屏幕上。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由FrameBuffer设备驱动来完成的。但FrameBuffer本身不具备任何运算数据的能力,好比只是一个暂时存放水的水池,CPU将运算后的结果放到这个水池,水池再将结果流到显示器。中间不会对数据进行处理。应用程序也可以直接读写这个水池的内容。在这种机制下,尽管FrameBuffer需要真正的显卡驱动的支持,但所有显示任务都由CPU完成,因此CPU负担很重。

FrameBuffer只是一个提供显示内存和显示芯片寄存器从物理内存映射到进程地址空间中的设备。所以对于应用程序而言,如果希望在FrameBuffer之上进行图形编程,还需要自己动手完成其他许多工作。

 

图形引擎及输入引擎:

在MiniGUI0.3.xx的开发过程中,引入了图形和输入抽象层(Graphics and Input Abstract Layer, GAL & IAL)的概念。抽象层的概念类似Linux内核虚拟文件系统的概念。它定义了一组不依赖于任何特殊硬件的抽象接口,所有顶层的图形操作和输入处理都建立在抽象接口之上。而用于实现这一抽象接口的底层代码称为“图形引擎”或“输入引擎”,类似操作系统中的驱动程序。这实际是一种面向对象的程序接口。利用这种抽象接口,我们可以将MiniGUI非常方便地移植到其他POSIX系统上,只需要根据我们的抽象层接口实现新的图形引擎和输入引擎即可。一般而言,基于Linux的嵌入式系统内核会提供FrameBuffer支持,这样MiniGUI已有的FBCON图形引擎可以运行在一般的PC上,也可以运行在特定的嵌入式系统上。因此,通常我们不需要开发针对特定嵌入式设备的图形引擎,而只要使用FBCON图形引擎即可。同时,MiniGUI还提供了Shadow, CommLCD等应用于不同场合的图形引擎。

但相比图形来讲,将MiniGUI的底层输入与上层相隔显得更为重要。在基于Linux的嵌入式系统中,图形引擎可以通过FrameBuffer而获得,而输入设备的处理却没有统一的接口。在PC上,我们通常使用键盘和鼠标,而在嵌入式系统上,可能只有触摸屏和为数不多的几个键。在这种情况下,提供一个抽象的输入层,就显得格外重要。

 

MiniGUI提供的图形引擎:

1.  Shadow

该引擎的主要功能是:提供对异步更新图形设备的支持,比如无法直接访问FrameBuffer等的情况。用来在NEWGAL之上支持低于8位色的显示模式。目前提供了对QVFB各种显示模式的支持。

2.  MLShadow

    该引擎是实现了了在机顶盒、PMP等产品方案中提供多个显示层,以完成累死硬件提供的图形层叠加功能,自动实现层之间的透明、半透明的显示。该引擎的主要功能是:可以实现多个虚拟图层之间的透明或者半透明叠加,可以将Shadow引擎作为真实引擎,以实现对下于8位色的支持以及实现屏幕旋转的支持。

3.  pc_xvfb

    该引擎的主要功能是:使用同一的启动参数,使MiniGUI可以在初始化时自动启动该xvfb程序。使用统一的共享内存对象键值,是的不论采用qvfb(Qt vfb)还是wvfb(Window vfb)还是gvfb(Gtk+ vfb)程序,都可以让pc_xvfb输入引擎使用同样的键值来获取帧缓冲区的系统共享内存对象。使用统一的关到/Unix socket对象及输入数据传输协议,使得不论采用qvfb还是wvfb还是gvfb程序,都可以让pc_xvfb输入引擎使用同样的机制获得用户在窗口中的输入数据。

4.  rtos_xvfb

借助rtos_xvfb引擎,可将MiniGUI运行在摸个已有的RTOS图形系统之上,比如uC/GUI、Gtk+、Tilcon等。其原理如下:

由rtos_xvfb程序模块创建窗口,分配虚拟帧缓冲区,然后以线程方式启动MiniGUI程序,MiniGUI程序在虚拟缓冲区中绘制,按约定的规范使用环形缓冲区存放rtos_xvfb引擎产生的输入数据,MiniGUI的rtos_xvfb输入引擎提供相关接口。

xVFBAllocVirtualFrameBuffer/xVFBFreeVirtualFrameBuffer      //创建/销毁虚拟帧缓冲区的接口

xVFBCreateEventBuffer/xVFBDestroyEventBuffer                        //创建/释放环形缓冲区的接口

xVFBNotifyNewEvent             //用于向环形缓冲区放入输入事件,并通知rtos_xvfb引擎读取的函数接口

5.  CommLCD

    该引擎的主要功能是为各种操作系统提供可直接访问LCD FrameBuffer设备的支持

 

 

MiniGUI提供的输入引擎:

1.      Comm IAL

MiniGUI为传统嵌入式操作系统提供了Common输入引擎(comm),使用该引擎可以很方便地实现对键盘、鼠标或触摸屏等输入设备的支持。

使用该引擎时,需要根据操作系统或底层驱动由客户自己为MiniGUI实现以下5个函数接口:

int __comminput_init(void);                                                                   //初始化输入设备

void __comminput_deinit(void);                                                             //释放输入设备

int __comminput_ts_getdata(short *x, short*y, short *button);          //返回当前鼠标或触摸屏信息

int __comminput_kb_getdata(short *key, short*status);                      //返回键盘输入信息

int __comminput_wait_for_input(void);                                                //返回输入事件类型

2.      Custom IAL

MiniGUI 3.0专业版和标准版的输入和输出引擎都是飞漫软件定制实现的,如果我们需要自己定制IAL的话,可以使用MiniGUI提供的custom-ial库自定义ial引擎接口的实现。按照下面的方法编写好IAL源代码后,要讲该源代码编译生成一个ial库,最后将实例、minigui库和ial库一起编译,才可以生成正确的可执行文件。Custom输入引擎在customial.h中给我们提供了定制键盘和鼠标消息处理的接口,我们只要实现下面的接口,就可以实现对相关消息的处理了:

BOOL InitCustomInput(INPUT *input, constchar *mdev, const char *mtype);

Void TermCustomInput(void);



推荐阅读
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 本文基于Java官方文档进行了适当修改,旨在介绍如何实现一个能够同时处理多个客户端请求的服务端程序。在前文中,我们探讨了单客户端访问的服务端实现,而本篇将深入讲解多客户端环境下的服务端设计与实现。 ... [详细]
  • Node.js在服务器上的多种部署策略
    本文探讨了Node.js应用程序在服务器上部署的几种有效方法,包括使用Screen、PM2以及通过宝塔面板进行简易管理。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • 本文介绍了在Linux环境下如何有效返回命令行状态、上一级目录及快速查找头文件和函数定义的方法。包括处理长时间运行命令、编辑器退出技巧、目录导航以及文件搜索策略。 ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • Linux内核中的内存反碎片技术解析
    本文深入探讨了Linux内核中实现的内存反碎片技术,包括其历史发展、关键概念如虚拟可移动区域以及具体的内存碎片整理策略。旨在为开发者提供全面的技术理解。 ... [详细]
  • 本文介绍了如何通过安装和配置php_uploadprogress扩展来实现文件上传时的进度条显示功能。通过一个简单的示例,详细解释了从安装扩展到编写具体代码的全过程。 ... [详细]
  • 本文探讨了如何利用 Android 的 Movie 类来展示 GIF 动画,并详细介绍了调整 GIF 尺寸以适应不同布局的方法。同时,提供了相关的代码示例和注意事项。 ... [详细]
  • Hanks博士是一位著名的生物技术专家,他的儿子Hankson对数学有着浓厚的兴趣。最近,Hankson遇到了一个有趣的数学问题,涉及求解特定条件下的正整数x,而不使用传统的辗转相除法。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
author-avatar
谁的围脖搞笑排行榜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有