📄 minigui 体系结构之四 图形抽象层和输入抽象层及 native engine 的实现(一).htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0082)http://www-900.ibm.com/developerWorks/cn/linux/embed/minigui/minigui-8/index.shtml -->
<HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一)</TITLE>
<META
content="linux, linux tutorials, linux training, linux standards, linux code, linux resources, linux programming, open source standards, linux how to, IBM, linux 教程, linux 培训,Linux 文章, Linux 论文, linux 标准, Linux 白皮书 linux 代码, linux 参考资料, linux 编程, 开放源码标准"
name=KEYWORDS>
<META content="嵌入,MiniGUI,体系结构,图形抽象层,输入抽象层,Native Engine" name=KEYWORDS>
<META
content="本文是 MiniGUI 体系结构系列文章的第四篇。图形抽象层(GAL)和输入抽象层(IAL)大大提高了 MiniGUI 的可移植性,并将底层图形设备和上层接口分离开来。这里将重点介绍 MiniGUI 的 GAL 和 IAL 接口,并以最新的 MiniGUI-Lite 版本为例,介绍基于 Linux FrameBuffer 的 Native 图形引擎的实现,以及特定嵌入式系统上输入引擎的实现。"
name=ABSTRACT>
<META
content="本文是 MiniGUI 体系结构系列文章的第四篇。图形抽象层(GAL)和输入抽象层(IAL)大大提高了 MiniGUI 的可移植性,并将底层图形设备和上层接口分离开来。这里将重点介绍 MiniGUI 的 GAL 和 IAL 接口,并以最新的 MiniGUI-Lite 版本为例,介绍基于 Linux FrameBuffer 的 Native 图形引擎的实现,以及特定嵌入式系统上输入引擎的实现。"
name=DESCRIPTION>
<META content=developerWorks name=TITLE>
<META http-equiv=Content-Type content="text/html; charset=GB2312">
<META content=developerWorks name=TITLE>
<META content=/developerWorks/cn/cncontent.nsf/cn_dW_feedback/ name=OWNER>
<META content=papers_html name=dWCategory>
<META content=Linux name=zone>
<META content=Public name=SECURITY>
<META content=text/xhtml name=FORMAT>
<META content="Copyright (c) 2000 by IBM Corporation" name=COPYRIGHT>
<META content=index,follow name=ROBOTS>
<META content=cn name=IBM.COUNTRY><LINK
href="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/style.css"
type=text/css rel=stylesheet>
<META content="MSHTML 6.00.2800.1479" name=GENERATOR></HEAD>
<BODY aLink=#0000ff bgColor=#ffffff leftMargin=0 topMargin=0 marginwidth="0"
marginheight="0"><!-- MASTHEAD Do not change this include --><LINK
href="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/style3.css"
type=text/css rel=stylesheet><!-- comments #2 --><!-- begin insert header includes -->
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR bgColor=#006699>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width=300 border=0>
<TBODY>
<TR bgColor=#006699>
<TD width=150><IMG height=25 alt=IBM
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/mast_logo.gif"
width=150></TD>
<TD width=150
background="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/mgradient.gif"><FONT
face="arial, sans-serif" color=#99ccff
size=-1><B>China</B></FONT><BR><IMG height=1 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=150></TD></TR></TBODY></TABLE></TD>
<TD align=left>
<TABLE cellSpacing=0 cellPadding=0 width=300 border=0>
<TBODY>
<TR>
<TD width=100><A
href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/shop/cn"><IMG
height=25 alt=购物
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/shopibm.gif"
width=100 border=0></A></TD>
<TD width=100><A
href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/cn/support"><IMG
height=25 alt=技术支持
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/support_chs.gif"
width=100 border=0></A></TD>
<TD width=100><A
href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/cn/support/product"><IMG
height=25 alt=免费下载
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/downloads_chs.gif"
width=100 border=0></A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR bgColor=#000000>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width=600 border=0>
<TBODY>
<TR>
<TD width=150 bgColor=#006699><IMG height=21 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/mast_lnav_sp.gif"
width=150></TD>
<TD bgColor=#000000 colSpan=4>
<TABLE height=21 cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD align=middle width=79 bgColor=#000000 height=21><A
class=nav style="COLOR: #ffffff"
href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/cn"><B>IBM
主页</B></A></TD>
<TD width=1 bgColor=#959595><IMG height=1 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=1></TD>
<TD align=middle width=79 bgColor=#000000 height=21><A
class=nav style="COLOR: #ffffff"
href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/products"><B>产品</B></A></TD>
<TD width=1 bgColor=#959595><IMG height=1 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=1></TD>
<TD align=middle width=79 bgColor=#000000 height=21><A
class=nav style="COLOR: #ffffff"
href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/cn/services"><B>咨询</B></A></TD>
<TD width=1 bgColor=#959595><IMG height=1 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=1></TD>
<TD align=middle width=79 bgColor=#000000 height=21><A
class=nav style="COLOR: #ffffff"
href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/cn/industry"><B>行业</B></A></TD>
<TD width=1 bgColor=#959595><IMG height=1 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=1></TD>
<TD align=middle width=79 bgColor=#000000 height=21><A
class=nav style="COLOR: #ffffff"
href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/cn/news"><B>新闻</B></A></TD>
<TD width=1 bgColor=#959595><IMG height=1 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=1></TD>
<TD align=middle width=79 bgColor=#000000 height=21><A
class=nav style="COLOR: #ffffff"
href="http://www-900.ibm.com/cgi-bin/click.p?url=http://www.ibm.com/cn/ibm"><B>关于
IBM</B></A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD> <A
href="http://www-900.ibm.com/developerWorks/cn/index.html"><B>dW
中国站点</B></A><B> : </B><A
href="http://www-900.ibm.com/developerWorks/cn/linux/"
target=_top><B>Linux 概览</B></A><B> : </B><B><A
href="http://www-900.ibm.com/developerWorks/cn/cnpapers.nsf/linux-papers-bynewest?OpenView&count=500">文档库
- 论文</A></B></TD></TR>
<TR>
<TD width="100%"><IMG height=1 alt=""
src="D:\新建文件夹\MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files\c(1).gif"
width=8></TD>
<TR>
<TD bgColor=#cc6633 height=3><IMG height=3 alt=""
src="D:\新建文件夹\MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files\c(1).gif"
width=150></TD></TR>
<TR>
<TD bgColor=#333333 height=1><IMG height=1 alt=""
src="D:\新建文件夹\MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files\c(1).gif"
width=150></TD></TR>
<TR>
<TD bgColor=#000000 height=1><IMG height=1 alt=""
src="D:\新建文件夹\MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files\c(1).gif"
width=150></TD></TR></TBODY></TABLE><!-- Title Area -->
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top width=5><IMG height=1 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=5></TD>
<TD vAlign=top><BR><B><FONT class=title>MiniGUI 体系结构之四</FONT></B><BR><B
class=subhead>图形抽象层和输入抽象层及 Native Engine 的实现(一)</B>
<P>魏永明<BR>蓝点软件(北京)研发中心技术主管<BR>2001/04/15</P><!-- Start TOC -->
<TABLE cellSpacing=0 cellPadding=0 width=120 align=right border=0>
<TBODY>
<TR>
<TD align=middle bgColor=#cc6633><FONT face=helvetica,helv,arial
color=#ffffff size=-1><B>内容:</B></FONT></TD></TR>
<TR>
<TD width="100%" bgColor=#000000><IMG height=1 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=1></TD></TR>
<TR>
<TD width="100%" bgColor=#ffffff><IMG height=4 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=1></TD></TR>
<TR>
<TD vAlign=top align=right>
<TABLE cellSpacing=0 cellPadding=3 width="95%" border=0>
<TBODY>
<TR>
<TD><A
href="http://www-900.ibm.com/developerWorks/cn/linux/embed/minigui/minigui-8/index.shtml#1"><FONT
face=helvetica,helv,arial size=-2>引言</FONT></A></TD></TR>
<TR>
<TD><A
href="http://www-900.ibm.com/developerWorks/cn/linux/embed/minigui/minigui-8/index.shtml#2"><FONT
face=helvetica,helv,arial size=-2>MiniGUI 的 GAL 和 IAL
接口</FONT></A></TD></TR>
<TR>
<TD><A
href="http://www-900.ibm.com/developerWorks/cn/linux/embed/minigui/minigui-8/index.shtml#resources"><FONT
face=helvetica,helv,arial size=-2>资源</FONT></A></TD></TR>
<TR>
<TD><A
href="http://www-900.ibm.com/developerWorks/cn/linux/embed/minigui/minigui-8/index.shtml#author"><FONT
face=helvetica,helv,arial
size=-2>关于作者</FONT></A></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD bgColor=#000000><IMG height=5 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/c.gif"
width=150></TD></TR></TBODY></TABLE><!-- Start main body -->
<BLOCKQUOTE>本文是 MiniGUI 体系结构系列文章的第四篇。图形抽象层(GAL)和输入抽象层(IAL)大大提高了 MiniGUI
的可移植性,并将底层图形设备和上层接口分离开来。这里将重点介绍 MiniGUI 的 GAL 和 IAL 接口,并以最新的
MiniGUI-Lite 版本为例,介绍基于 Linux FrameBuffer 的 Native
图形引擎的实现,以及特定嵌入式系统上输入引擎的实现。</BLOCKQUOTE><A id=1 name=1></A>
<P><STRONG class=subhead>1 引言</STRONG></P>
<P>在 MiniGUI 0.3.xx 的开发中,我们引入了图形和输入抽象层(Graphics and Input Abstract
Layer,GAL 和 IAL)的概念。抽象层的概念类似 Linux
内核虚拟文件系统的概念。它定义了一组不依赖于任何特殊硬件的抽象接口,所有顶层的图形操作和输入处理都建立在抽象接口之上。而用于实现这一抽象接口的底层代码称为“图形引擎”或“输入引擎”,类似操作系统中的驱动程序。这实际是一种面向对象的程序结构。利用
GAL 和 IAL,MiniGUI 可以在许多已有的图形函数库上运行,比如 SVGALib 和 LibGGI。并且可以非常方便地将 MiniGUI
移植到其他 POSIX 系统上,只需要根据我们的抽象层接口实现新的图形引擎即可。比如,在基于 Linux 的系统上,我们可以在 Linux
FrameBuffer 驱动程序的基础上建立通用的 MiniGUI 图形引擎。实际上,包含在 MiniGUI 1.0.00
版本中的私有图形引擎(Native Engine)就是建立在 FrameBuffer 之上的图形引擎。一般而言,基于 Linux
的嵌入式系统均会提供 FrameBuffer 支持,这样私有图形引擎可以运行在一般的 PC 上,也可以运行在特定的嵌入式系统上。</P>
<P>相比图形来讲,将 MiniGUI 的底层输入与上层相隔显得更为重要。在基于 Linux 的嵌入式系统中,图形引擎可以通过
FrameBuffer 而获得,而输入设备的处理却没有统一的接口。在 PC
上,我们通常使用键盘和鼠标,而在嵌入式系统上,可能只有触摸屏和为数不多的几个键。在这种情况下,提供一个抽象的输入层,就显得格外重要。</P>
<P>本文将介绍 MiniGUI 的 GAL 和 IAL 接口,并介绍私有图形引擎和特定嵌入式系统下的输入引擎实现。</P><A id=2
name=2></A>
<P><STRONG class=subhead>2 MiniGUI 的 GAL 和 IAL 定义</STRONG></P>
<P>GAL 和 IAL 的结构是类似的,我们以 GAL 为例说明 MiniGUI GAL 和 IAL 抽象层的结构。</P><STRONG>2.1
GAL 和图形引擎</STRONG>
<P>参见图
1。系统维护一个已注册图形引擎数组,保存每个图形引擎数据结构的指针。系统利用一个指针保存当前使用的图形引擎。一般而言,系统中至少有两个图形引擎,一个是“哑”图形引擎,不进行任何实际的图形输出;一个是实际要使用的图形引擎,比如
LibGGI 或者 SVGALib,或者 Native
Engine。每个图形引擎的数据结构定义了该图形引擎的一些信息,比如标识符、属性等,更重要的是,它实现了 GAL
所定义的各个接口,包括初始化和终止、图形上下文管理、画点处理函数、画线处理函数、矩形框填充函数、调色板函数等等。</P>
<P align=center><IMG height=390 alt=""
src="MiniGUI 体系结构之四 图形抽象层和输入抽象层及 Native Engine 的实现(一).files/image01.gif"
width=475><BR>图1 GAL 和图形引擎</P>
<P>如果在某个实际项目中所使用的图形硬件比较特殊,现有的图形引擎均不支持。这时,我们就可以安照 GAL 所定义的接口实现自己的图形引擎,并指定
MiniGUI 使用这种私有的图形引擎即可。这种软件技术实际就是面向对象多态性的具体体现。</P>
<P>利用 GAL 和 IAL,大大提高了 MiniGUI 的可移植性,并且使得程序的开发和调试变得更加容易。我们可以在 X Window
上开发和调试自己的 MiniGUI 程序,通过重新编译就可以让 MiniGUI 应用程序运行在特殊的嵌入式硬件平台上。</P>
<P>在代码实现上,MiniGUI 通过 GFX 数据结构来表示图形引擎,见清单 1。</P>
<TABLE class=code-sample cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><PRE> 清单 1 MiniGUI 中的图形引擎结构(src/include/gal.h)
55 typedef struct tagGFX
56 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -