基于Elastos操作系統的圖形引擎的設計與實現doc - GoogleCode_第1頁
基于Elastos操作系統的圖形引擎的設計與實現doc - GoogleCode_第2頁
基于Elastos操作系統的圖形引擎的設計與實現doc - GoogleCode_第3頁
基于Elastos操作系統的圖形引擎的設計與實現doc - GoogleCode_第4頁
基于Elastos操作系統的圖形引擎的設計與實現doc - GoogleCode_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于Elastos操作系統的圖形引擎的設計與實現張金煥, 陳榕,張曼夕(同濟大學 基礎軟件工程中心,上海 200092) 摘 要: Elastos圖形系統Vinci是Elastos操作系統的一個子系統,負責在屏幕上繪制像素、文本和用戶界面(包括窗口、菜單、對話框)等。圖形引擎的體系結構決定了此系統的簡易型、靈活性、效率和穩定性,所以它的設計又顯得至關重要.本文分別介紹了基于Elastos操作系統的圖形系統Vinci、此圖形引擎的設計需求,在此基礎上根據圖形系統的引擎功能設計需求結合Elastos圖形系統Vinci自有的特點,實現了Vinci引擎的設計,使得基于Vinci系統的Elastos操作

2、系統可以完成各種各樣的操作。關鍵詞: 圖形系統Vinci、圖形引擎、設計需求、具體實現中圖法分類號:TP316文獻標識碼: A The Design and Realization of Graphics Engine Design Based On the Elastos operating systemZhang Jinhuan, Chen Rong, Zhang Manxi(System Software Engineering Centre of Tongji University, Shanghai 200092, China)Abstract: Elastos graphics s

3、ystem Elastos Vinci is a subsystem of the operating system, responsible for drawing pixels on the screen, text and the user interface (including windows, menus, and dialog). The architecture of graphics engine determines that the system is easy-to-use, flexibility, efficiency and stability, so it is

4、 essential. This paper introduces the graphics-based operating system Elastos Vinci system, the design of the graphics engine demand ,and According to graphics system and the engine function design demand and Elastos graphics system Vincis own characteristics ,we realize the Vinci engine design whic

5、h makes he operating system Elastos based on Vinci system can completed a wide range of operations. Keywords: Vinci、 Graphics Engine、 Engine Demand 、Realization-基金項目:國家“863”基金項目(2001AA113400) 1 引言通常,我們把引擎看作是一種動力裝置,圖形引擎也一樣,GDI(Graphic Device Interface)之所以可以完成各種各樣的操作,就是依賴于底層圖形引擎的支持。 Elastos圖形引擎5由五部分組成

6、:窗口管理、事件管理、繪圖、字體和圖像處理,它提供了完成窗口、事件、繪圖、字體管理和圖像處理所需的各項操作,GDI就是將這些底層操作封裝起來,使用戶可以在不了解底層實現的基礎上方便的調用底層的函數,完成各項操作。本文介紹了Elastos操作系統中圖形系統中圖形引擎的設計及具體實現過程。2 Elastos圖形系統Vinci2.1 Vinci系統簡介Elastos圖形系統Vinci是Elastos操作系統1的一個子系統,負責在屏幕上繪制像素、文本和用戶界面(包括窗口、菜單、對話框)等。Elastos圖形系統還負責和硬件設備的通信,所以在Elastos操作系統上編寫圖形應用程序時,應用程序不需要直接

7、訪問硬件設備。2.2 Vinci系統整體架構從整體結構上看,Elastos圖形系統Vinci是分層設計的,見圖2.1 Vinci整體結構圖。底層是驅動層;中間層為Vinci的圖形引擎層,其中包括了窗口系統必不可少的各個模塊,負責創建Window(實際對應上層Form),收發消息,以及一些基本繪圖操作;頂層是控件集3,是用戶可見的,與用戶進行交互的主要一層,多種控件為用戶建立了豐富的用戶界面提供了保障。應用程序應用程序應用程序控件集控件集控件集圖形引擎設備驅動圖2.1 Vinci整體結構圖在Vinci系統UI模型中,Grafix.dll作為低層圖形引擎為繪圖組件eladgi.dll和控件組件el

8、actrl.dll提供了底層服務。elagdi.dll處于頂層控件于引擎進行繪圖及窗口處理的交互中間態,也提供一些獨立的API,可以直接通過這些API2與引擎進行交互;elactrl.dll作為UI控件構件為應用程序的UI Application提供了應用界面服務。而控件6中的所需要進行的繪圖操作需elagdi.dll引擎中的font、image的支持。3 Vinci圖形系統引擎設計3.1 Vinci圖形引擎功能需求3.1.1 窗口的創建和銷毀由CreatWindow創建窗口。CreateWindow可以創建用戶定義屬性的窗口,包括窗口大小,像素格式,窗口屬性等。函數返回一個窗口指針,用于以后

9、的窗口操作。由于窗口上的繪圖操作都是在對應的surface上進行的,所以與CreateWindow對應的CreateSurface方法,用于創建window對應的surface,與CreateWindow類似的是,創建surface是也可以指定一系列參數,包括surface大小與surface像素格式等。3.1.2 在窗口中繪圖每一個窗口對應一塊內存,即surface,在窗口內繪圖就是將相應的像素內容填入surface內存中,當然,首先要將像素格式轉換為目的顯存支持的格式。這一系列轉換格式及寫入內存的操作都是引擎處理的重點。3.1.3 消息隊列的處理Vinci不直接與硬件交互,通過驅動層與硬件

10、交互。圖形系統的消息除了來自驅動層傳入的觸筆和鍵盤消息,還來自窗口的變換等,例如,窗口的切換和拖動將觸發重繪消息;如果用戶使用了定時器,還存在定時消息的處理等等。3.1.4 窗口的繪制屏幕上出現多個窗口時,就存在Z序處理問題4。3.2 引擎設計綜合上述引擎功能的需求,初步將引擎結構設計為由以下幾個接口分工合作完成:ILayer接口:負責window和surface的創建,surface的配置,layer透明度的設置等。IWindow接口:負責window的顯示,隱藏,移動,定時器的設置與銷毀,透明度的設置,向消息隊列增加新消息等。ISurface接口:負責簡單的圖形繪制以及窗口信息的獲得等。E

11、ventbuffer接口:負責管理消息,包括增加消息,獲取消息等處理消息的操作。Windowstack接口:負責窗口的管理,多個窗口創建后以隊列形式被管理。窗口的創建、銷毀、移動等都需要在windowstack中留下記錄。4 Vinci引擎的實現4.1 顯示層ILayer的實現顯示層主要負責創建window和surface,另外還需要設置方法以進行顯示層的切換和透出等特殊效果。ILayer接口中,主要使用到以下幾個重要的數據結構:LayerFormat: 該數據結構記錄了某一層的基本信息。當用戶要求Enable某一層時,將以此結構體類型的變量為參數傳入Layer的Enable()方法。Disp

12、layInformation: 該數據結構記錄了層的顯示信息。在Enable Baseplane、Overlay1或Overlay2任一層時,需要對DisplayInformation的各項賦值,將用于windowstack中。類buffer: 主要用來記錄一些層的信息,用于surface的繪制。每一個window都對應了一塊surface(即內存空間),如果window是Doublebuffer模式,則獨占一塊內存空間,否則和其它window共用一塊內存空間。上層對于window或Form的繪制操作都是在內存中進行的,最后通過Flip操作將內存中的數據copy到當前層的顯存上,才能顯示在屏幕

13、上。4.2 窗口隊列管理的實現 Windowstack中使用了一個結構體FusionVector記錄各項參數,包括windowstack中的window element,window的數量以及windowstack的最大容量。每層layer具有一個windowstack隊列,各個窗口被創建后,將被加入相應layer的windowstack中,作為一個Fusion元素。各窗口在隊列中的次序按照優先級排列,如果用戶沒有特別指定窗口優先級,后創建的窗口默認優先級較高,對應的視覺效果就是顯示在上層,覆蓋先創建的窗口。Windowstack中主要的接口方法是對于添加刪除窗口的處理以及各種窗口操作引起的焦

14、點切換和窗口刷新操作。4.3 窗口管理的實現 窗口對事件的管理是根據不同的窗口類型的進行不同的操作的。窗體有兩種類型,即WindowType_Common和WindowType_Main,對于WindowType_Main型的窗體,我們會在窗體初始化的時候,為該系列window創建一個eventbuffer。而對于WindowType_Common型的窗體,它與同environment的主窗體共用一個eventbuffer。一個應用可能有多個窗體,其中只有一個主窗體,只要這些窗體具有相同的enviroment,所有相關的事件統一進入主窗口創建的eventbuffer。4.4 窗口繪制的實現 W

15、indow對應的內存可繪制區域是由surface管理的,通過類 buffer主要用來記錄一些層的信息,用于surface的繪制。在layer初始化的時候,會創建windowstack,并且在windowstack中記錄了primarysurface,primarysurface是記錄顯存地址的一塊特殊的surface。當窗口內容改變時,引擎修改窗口的surface相應內存地址的內容,經過窗口的一系列處理,最終通過Blit操作使更新后的內容顯示在屏幕上。 上層的一些繪圖操作實際上是將顏色信息寫入window對應的surface buffer,這只是在內存中進行操作,沒有反映在屏幕上。經過一系列判

16、斷和處理之后,此時內存中已經是應該顯示的結果,我們只需要將內存中記錄的顏色信息拷貝到顯存中即可。primarysurface的buffer中記錄的就是當前layer在顯存中的首址, Enable Overlay1時需要修改primarysurface的buffer中的值,將buffer中記錄的首址改為驅動為Overlay1分配的顯存首址。確定了顯存的地址后,開始拷貝操作,這里涉及到格式轉換的問題。不同格式之間的拷貝要注意格式轉換。5 總結 基于此圖形引擎的Vinci系統實現了具有高效的事件處理機制和面向構件的體系結構,這樣大大提高了圖形程序與用戶交互效率,同時它為用戶靈活的實現多種圖形界面提供

17、了保障。參考文獻:1 陳榕, 劉藝平. 技術報告: 基于構件、中間件的因特網操作系統及跨操作系統的構件、中間件運行平臺(863課題技術鑒定文件), 2003.2 Elastos, Inc. Elastos 2.1 Information Repository. Available online at /download.php 2008,33 上海科泰世紀科技有限公司.CAR構件大全EB/OL. / 2008-01-014 Feng Yuan. Windows圖形編程. 機械工業出版社,2002,65 Koretide WebsiteEB/OL. / 2008,36 Chen Rong. The Application of Middleware Technology in Embedded OSR. Hangzhou: Workshop on Embedded System, In Conjunction with t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論