?? minigui 體系結構之四 圖形抽象層和輸入抽象層及 native engine 的實現(xiàn)(一).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 的實現(xiàn)(一)</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 圖形引擎的實現(xiàn),以及特定嵌入式系統(tǒng)上輸入引擎的實現(xiàn)。"
name=ABSTRACT>
<META
content="本文是 MiniGUI 體系結構系列文章的第四篇。圖形抽象層(GAL)和輸入抽象層(IAL)大大提高了 MiniGUI 的可移植性,并將底層圖形設備和上層接口分離開來。這里將重點介紹 MiniGUI 的 GAL 和 IAL 接口,并以最新的 MiniGUI-Lite 版本為例,介紹基于 Linux FrameBuffer 的 Native 圖形引擎的實現(xiàn),以及特定嵌入式系統(tǒng)上輸入引擎的實現(xiàn)。"
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 的實現(xiàn)(一).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 的實現(xiàn)(一).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 的實現(xiàn)(一).files/mast_logo.gif"
width=150></TD>
<TD width=150
background="MiniGUI 體系結構之四 圖形抽象層和輸入抽象層及 Native Engine 的實現(xiàn)(一).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 的實現(xiàn)(一).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 的實現(xiàn)(一).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 的實現(xiàn)(一).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 的實現(xiàn)(一).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 的實現(xiàn)(一).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 的實現(xiàn)(一).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>產(chǎn)品</B></A></TD>
<TD width=1 bgColor=#959595><IMG height=1 alt=""
src="MiniGUI 體系結構之四 圖形抽象層和輸入抽象層及 Native Engine 的實現(xiàn)(一).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 的實現(xiàn)(一).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>行業(yè)</B></A></TD>
<TD width=1 bgColor=#959595><IMG height=1 alt=""
src="MiniGUI 體系結構之四 圖形抽象層和輸入抽象層及 Native Engine 的實現(xiàn)(一).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 的實現(xiàn)(一).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 的實現(xiàn)(一).files\c(1).gif"
width=8></TD>
<TR>
<TD bgColor=#cc6633 height=3><IMG height=3 alt=""
src="D:\新建文件夾\MiniGUI 體系結構之四 圖形抽象層和輸入抽象層及 Native Engine 的實現(xiàn)(一).files\c(1).gif"
width=150></TD></TR>
<TR>
<TD bgColor=#333333 height=1><IMG height=1 alt=""
src="D:\新建文件夾\MiniGUI 體系結構之四 圖形抽象層和輸入抽象層及 Native Engine 的實現(xiàn)(一).files\c(1).gif"
width=150></TD></TR>
<TR>
<TD bgColor=#000000 height=1><IMG height=1 alt=""
src="D:\新建文件夾\MiniGUI 體系結構之四 圖形抽象層和輸入抽象層及 Native Engine 的實現(xiàn)(一).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 的實現(xiàn)(一).files/c.gif"
width=5></TD>
<TD vAlign=top><BR><B><FONT class=title>MiniGUI 體系結構之四</FONT></B><BR><B
class=subhead>圖形抽象層和輸入抽象層及 Native Engine 的實現(xiàn)(一)</B>
<P>魏永明<BR>藍點軟件(北京)研發(fā)中心技術主管<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 的實現(xiàn)(一).files/c.gif"
width=1></TD></TR>
<TR>
<TD width="100%" bgColor=#ffffff><IMG height=4 alt=""
src="MiniGUI 體系結構之四 圖形抽象層和輸入抽象層及 Native Engine 的實現(xiàn)(一).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 的實現(xiàn)(一).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
圖形引擎的實現(xiàn),以及特定嵌入式系統(tǒng)上輸入引擎的實現(xiàn)。</BLOCKQUOTE><A id=1 name=1></A>
<P><STRONG class=subhead>1 引言</STRONG></P>
<P>在 MiniGUI 0.3.xx 的開發(fā)中,我們引入了圖形和輸入抽象層(Graphics and Input Abstract
Layer,GAL 和 IAL)的概念。抽象層的概念類似 Linux
內核虛擬文件系統(tǒng)的概念。它定義了一組不依賴于任何特殊硬件的抽象接口,所有頂層的圖形操作和輸入處理都建立在抽象接口之上。而用于實現(xiàn)這一抽象接口的底層代碼稱為“圖形引擎”或“輸入引擎”,類似操作系統(tǒng)中的驅動程序。這實際是一種面向對象的程序結構。利用
GAL 和 IAL,MiniGUI 可以在許多已有的圖形函數(shù)庫上運行,比如 SVGALib 和 LibGGI。并且可以非常方便地將 MiniGUI
移植到其他 POSIX 系統(tǒng)上,只需要根據(jù)我們的抽象層接口實現(xiàn)新的圖形引擎即可。比如,在基于 Linux 的系統(tǒng)上,我們可以在 Linux
FrameBuffer 驅動程序的基礎上建立通用的 MiniGUI 圖形引擎。實際上,包含在 MiniGUI 1.0.00
版本中的私有圖形引擎(Native Engine)就是建立在 FrameBuffer 之上的圖形引擎。一般而言,基于 Linux
的嵌入式系統(tǒng)均會提供 FrameBuffer 支持,這樣私有圖形引擎可以運行在一般的 PC 上,也可以運行在特定的嵌入式系統(tǒng)上。</P>
<P>相比圖形來講,將 MiniGUI 的底層輸入與上層相隔顯得更為重要。在基于 Linux 的嵌入式系統(tǒng)中,圖形引擎可以通過
FrameBuffer 而獲得,而輸入設備的處理卻沒有統(tǒng)一的接口。在 PC
上,我們通常使用鍵盤和鼠標,而在嵌入式系統(tǒng)上,可能只有觸摸屏和為數(shù)不多的幾個鍵。在這種情況下,提供一個抽象的輸入層,就顯得格外重要。</P>
<P>本文將介紹 MiniGUI 的 GAL 和 IAL 接口,并介紹私有圖形引擎和特定嵌入式系統(tǒng)下的輸入引擎實現(xiàn)。</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。系統(tǒng)維護一個已注冊圖形引擎數(shù)組,保存每個圖形引擎數(shù)據(jù)結構的指針。系統(tǒng)利用一個指針保存當前使用的圖形引擎。一般而言,系統(tǒng)中至少有兩個圖形引擎,一個是“啞”圖形引擎,不進行任何實際的圖形輸出;一個是實際要使用的圖形引擎,比如
LibGGI 或者 SVGALib,或者 Native
Engine。每個圖形引擎的數(shù)據(jù)結構定義了該圖形引擎的一些信息,比如標識符、屬性等,更重要的是,它實現(xiàn)了 GAL
所定義的各個接口,包括初始化和終止、圖形上下文管理、畫點處理函數(shù)、畫線處理函數(shù)、矩形框填充函數(shù)、調色板函數(shù)等等。</P>
<P align=center><IMG height=390 alt=""
src="MiniGUI 體系結構之四 圖形抽象層和輸入抽象層及 Native Engine 的實現(xiàn)(一).files/image01.gif"
width=475><BR>圖1 GAL 和圖形引擎</P>
<P>如果在某個實際項目中所使用的圖形硬件比較特殊,現(xiàn)有的圖形引擎均不支持。這時,我們就可以安照 GAL 所定義的接口實現(xiàn)自己的圖形引擎,并指定
MiniGUI 使用這種私有的圖形引擎即可。這種軟件技術實際就是面向對象多態(tài)性的具體體現(xiàn)。</P>
<P>利用 GAL 和 IAL,大大提高了 MiniGUI 的可移植性,并且使得程序的開發(fā)和調試變得更加容易。我們可以在 X Window
上開發(fā)和調試自己的 MiniGUI 程序,通過重新編譯就可以讓 MiniGUI 應用程序運行在特殊的嵌入式硬件平臺上。</P>
<P>在代碼實現(xiàn)上,MiniGUI 通過 GFX 數(shù)據(jù)結構來表示圖形引擎,見清單 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 + -