• 沒有找到結果。

CWT 系統架構

在文檔中 CWT中OpenGL實作之研究 (頁 20-24)

第二章、 系統架構

2.1 CWT 系統架構

本節首先在2.1.1 節簡介 CWT 的設計原理及架構。接著在 2.1.2 節說明本論文如何實作CWT 架構中 CWT-GL 的部分。

2.1.1 CWT 的設計原理及架構

CWT 設計的目標是提供與 AWT 相容的 API,並改善繪圖工具 組,使其能以不同的繪圖函式庫來實作,達成改善繪圖效能之目的。

CWT 架構主要與 AWT 類似,可分為三種模式,以下介紹三種模式 的主要功能。[32][34]

1. 元件模式(Component Model):

由原生容器(Native Containers)與輕型元件(Light-weight Components)所組成。此處的設計與 Swing 類似,所有輕型 元件的繪製都是由軟體負責。原生容器主要包含Applet、

Dialog、Frame 與 Window,除了作為輕型元件的畫布,將所 有輕型元件都繪製在其之上外,也負責傳送系統底層所生成 的事件。

2. 事件模式(Event Model):

事件處理機制基本上與AWT 相同,但因 CWT 中大部分元件 都屬於輕型元件,故必須仰賴原生容器產生的各種事件。為

了將這些事件轉交給CWT 中的輕型元件,利用

EventManager 負責把原生容器所產生的事件存放在 CWT 的 事件佇列(Event Queue)中,等待 CWT 內部的事件分派執行 緒(Event Dispatch Thread)將事件分配給對應的輕型元件去 處理。

3. 繪圖模式(Painting Model):

繪圖模式基本上類似於 AWT 與 Swing 本來的架構,其中最重 要的部份如圖 2-1,為了讓繪圖模式能夠支援各式各樣不同的 繪圖函式庫,將其抽象化分成數個類別,例如 Graphics、

Image、Toolkit 與 WindowContext,因此各種的繪圖函式庫 都能藉由繼承這些類別,完成不同的實作。本論文也是透過 同樣的方式,完成 CWT-GL 實作。

圖 2-1:CWT-GL 與繪圖模式的繼承關係

2.1.2 實作 CWT-GL

本節將詳細介紹 CWT-GL 實作 CWT 中的哪些類別,並解釋各

個類別所負責的工作。

首先簡介AWT 中元件系統之設計。AWT 中元件的設計是橋接模 式(Bridge pattern)。如圖 2-2,分為抽象化之平臺獨立 API

(Platform-independent API)部分,以及平台特定實作

(Platform-specific Implementation)部份。圖中以一個視窗物件 (Window)為例,每個 Window 都會有一對應之 WindowPeer 物件。

為達成使用AWT 設計之視窗程式能擁有與同平臺相同之視窗介面,

WindowPeer 物件將會有各種不同平臺之實作,如圖中所示之

Windows WindowPeer、Motif WindowPeer 或 MacOS WindowPeer 等。於AWT 中,Peer 是當該元件即將被顯示在視窗上時,才由 Toolkit 物件產生。

圖 2-2:AWT 中元件之橋接模式設計

1. GlToolkit:

此類別負責各種原生容器的生成,並在原生容器產生之後,將 對應的GlWindowContext 類別也一併生成。除了原生容器 外,也與AWT 之 Toolkit 類別類似,負責 Image 的各種生成。

至於其他輕型元件的生成函式,則被抽象化到其父類別 CwtToolkit 中,與其他繪圖函式庫之實作共用相同的類別函 式。

2. GlWindowContext:

由GlToolkit 產生,存放有對應的原生容器,並且負責生成 GlGraphics 物件,回傳應用程式要求的 Graphics 物件,讓應 用程式能透過此物件進行繪製。除GlGraphics 物件外,也負 責處理由抽象元件傳遞來的Image 生成指令,產生 GlImage 物件。圖2-2 為 GlWindowContext 生成過程之流程。

圖 2-3:GlWindowContext 的生成過程

此處以Window 為例,當視窗元件實際要於螢幕上顯示時,會 透過GlToolkit 要求其產生對應之 Peer 物件,例 WindowPeer。

同時此時也會生成一與WindowPeer 物件對應之

GlWindowContext 物件,GlwindowContext 為負責作為所有 輕型元件畫布之重型元件。

3. GlImage:

負責存放Image 的各種屬性,並且生成對應之原生 Image。

GlImage 的生成方式有兩種,其一是由 Toolkit 直接生成,可 將存在的檔案或是資料直接生成一個Image 物件,在之後繪 製時使用,也能產生一空白的Image 作為背景繪圖用。另一 種則是透過抽象元件,傳遞生成Image 指令至

GlWindowContext,最後產生 GlImage 物件。

4. GlGraphics:

此為繪圖模式中最重要的類別,負責所有繪圖指令,一切的繪 圖動作最後都由此類別負責運算並繪製出畫面來。圖 2-3 為 GlGraphics 的生成過程,其一是由抽象元件取得繪圖物件,

透過GlWindowContext 產生一對應的 GlGraphics 物件回傳。

其二是由GlImage 取得繪圖物件。透過兩種不同的方式,使 其能個別在一般元件或者是圖片上進行繪製。

圖 2-4:GlGraphics 的生成方式

在文檔中 CWT中OpenGL實作之研究 (頁 20-24)

相關文件