顯示驅動程式和硬體 (轉)

worldblog發表於2007-12-04
顯示驅動程式和硬體 (轉)[@more@]  CE顯示和

介紹

  Windows CE操作的圖形顯示風格在版本2.0中有很大變化,在版本1.0中,圖形設計介面(GDI)直接與顯示硬體相接,在版本2.0中GDI與一個或更多顯示驅動程式相連,它們反過來與顯示硬體相連。這種顯示技術使得Windows CE能使用各種不同的顯示裝置而無需對每個裝置都有硬體程式碼程式,新的Windows CE GDI將小步驟與多用途結合起來。

  本論文首先考慮一個好的Windows CE顯示驅動程式具有的特徵,它討論了顯示驅動程式,應該的裝置驅動程式介面功能,同樣圖形原始引擎級別,能用來簡化寫顯示驅動程式,GDI支援裝置驅動程式亦在討論之列。

  本論文然後列舉了Windows CE支援的每個畫素深度的詳細、顯示緩衝格式,並討論顯示硬體,因為顯示驅動程式是GDI與顯示裝置之間通道、顯示驅動程式的硬體支援,也需支援GDI。

Windows CE顯示驅動程式

  像Windows CE大多數一樣,顯示驅動程式介面(DDI)為微軟的DDI的子集合,如果你不熟悉Windows NT DDI,在寫入你的Windows CE顯示驅動程式前,應該閱讀Windows NT裝置驅動程式包的顯示驅動程式部分。

  Windows CE僅使用Windows NT DDI中最基本的圖形引擎和驅動程式.Windows CE和Windows NT的差別,有下述細節:

  • Windows CE顯示驅動程式總有相同功能,GDI並不查詢驅動程式能力資訊;
  • Windows CE顯示驅動程式並不拒絕複雜的操作,它調其回GDI,以使操作分成簡單幾步,因為所有Windows CE顯示驅動程式支援相同功能,GD能夠在首次顯示驅動程式前分解複雜操作。
  • Windows CE顯示驅動程式被編輯成動態連結庫(.DLL)而不是庫函式(.LIB檔案)。

  所有Windows CE顯示驅動程式必須執行一套DDI函式,它由.GDI呼叫初始化顯示驅動程式和繪製以顯示,除了DDI函式,這有一套VC++類,它呼叫圖形初級引擎(GPE)類,顯示驅動程式用它使硬體加速更容易,標準的顯示驅動程式呼叫GPE類和加速是基於S3Trio64的顯示硬體,如果你的顯示硬體使用不同的視像,你能夠改變GPE呼叫方式以適合你的硬體能力。

  注意使用GPE類是可選擇的,你能夠不需它們而寫入你的顯示驅動程式,代價是使DDI函式的執行更加複雜,注意,由微軟提供的GPE類需要你的顯示硬體有一個flat 幀(frame)緩衝區,如果你的顯示硬體沒有,例如,它使用定製可移動視窗來連線整個視訊記憶體,它可能不能使用GPE類,為獲得更詳細資訊,參與本文中Windows CE顯示硬體推薦部分,特別是Dirty Rec s子部分。

  Windows CE顯示驅動程式在許多方式上與通常的裝置驅動程式不同,最主要不同是他們不暴露I/O介面。因此,他們不能被裝置管理器管理,因此暫存器從來不能被它們呼叫。結果,這沒有特別裝置檔案或其它檔案系統記錄,以與活動顯示驅動程式相協調,顯示驅動程式裝載的機制是一個使用顯示驅動程式的應用,呼叫帶有顯示驅動程式名的Create DC函式動態連結檔案。這使Windows CE能裝載顯示驅動程式,並初始化以使裝置上下文能夠返回撥用應用預設的顯示驅動程式,當然是自動載入。


DDI函式


  下面表格列舉了顯示和列印驅動程式的DDI函式顯示驅動程式,應執行此處列舉的全部顯示DDI函式。列印驅動程式則應執行全部的列印DDI函式。然而,僅有Drve Enable Drive必須由顯示驅動程式的動態連結庫(DLL)輸出。所以,僅有DrvEnableDrive必須有名稱,其它函式可隨意呼叫,因為他們由Drr Enable Driver返回的,函式指標輸出到GDI,無論誰被呼叫,總是跟隨定義在Win DDI.H檔案中的原型。

函式 用途 DrvAnyBlt 有擴充套件或透明位塊傳送 DrvBitPlt 有剪下和遮蔽的通常位塊傳送 Drv ConstrostControl 允許軟體、硬體對照調整 DrvCopyBits 傳送GDI設計的列印段到列印驅動程式 DrvCreateDeviceBitmap 設計和管理點陣圖 DrvDeleteDeviceBitmap 刪除設計點陣圖 DrvDisableDriver 通知驅動程式GDI不再需要它,並準備解除安裝它 DrvDisableP.D.Ev. 通知驅動程式GDI不再需要特殊列印或顯示裝置 DrvDisableSwrface 通知驅動程式GDI不再需要特殊繪製表面 DrvEnableDriver 由驅動程式輸出初始記錄,為GDI的DDI函式返回指標 DrvEnablePDEv 為GDI返回一個PDEV,它是一個物理顯示裝置的邏輯表示 DrvEnableace 設計一個繪製介面,並把它與PDEV相連 DrvEmdDoc 傳送任何所需的完成列印檔案控制資訊 DrvFillpath 用毛刷填充路徑 DrvGetMask 為目前顯示裝置獲取顏色遮蔽 DrvGetMode 列舉、顯示裝置支援的顯示模式 DrvMorePointer 移動指標,保證GDI不干涉 DrvPaint 用毛刷漆出一個特定區 DrvPowerHandler 呼叫處理、上電、掉電通知 DrvAweryFont 獲得字型公制資訊 DrvRealizeBrush 建立由GDI指定引數毛刷 DrvReamoceColor 把一個RGB顏色,對映到由裝置支援最可能獲得顏色 DrvSeepalette 設定顯示裝置調色盤 DrvSeepointershape 對游標設定新形狀並顯示 DrvStareDoc 傳送任意的開始列印檔案資訊 Drvstartpage 傳送任意的列印新頁的資訊 DrvshokePath 刪除路徑 DrvtransparentBrt 透明位塊傳送 Drvunrealizecolor 將顯示裝置制式的顏色映成RGB值


使用GPE類

  標準顯示驅動程式使用圖形引擎工程(GPE)類,當GPE類可選擇時,使用它們可很容易處理寫入顯示驅動程式,如果你使用GPE類,你僅需提供所需新程式碼,來使顯示硬體功能正常操作加速。

  GPE類需要你的顯示硬體使用一個flat frame緩衝區,也就是視訊記憶體必須位於一個鄰近的範圍,修正GPE類來使用一個非連續frame buffer將很費力氣。

  為建立一個基於GPE類顯示驅動程式,用下述步驟:

  1. 為專案設一子目錄;
  2. 由標準驅動目錄,例如S3Trio64目錄複製檔案到你的專案目錄;
  3. 全面更改檔案中設定裝置名,例如將“S3Trio64”改為你的裝置名;
  4. 更改config.cpp以使它把你的顯示裝置,放在一個線性frame-buffer模式;
  5. 使指定硬體加速失效;
  6. 建立並測試這些非加速驅動程式GPE,將用軟體產生輸出;
  7. 加入你的硬體加速模式。


GDI提供的支援顯示驅動程式服務

  Windows CE GDI以預先定義函式結構和一些獨立C函式形式,提供服務支援顯示驅動程式,預定製結構提供毛刷、剪下區、調色盤、刪除和填充路徑、轉化的支援、獨立的C函式提供裝置點陣圖和介面支援。

函式結構 用途 BRVSHOBJ 代表一個執行用實線或網格刪除填充操作的毛刷 BRVSHOBJ_PVALLOCRbrush 為毛刷分配記憶體 BRUSHOBJ_PVGeeRbrush 為特定毛刷返回指標 CLIPOBJ 代表剪下區結構 CLIPOBJ-BESUM 從剪下區,列舉剪下矩形的函式 CLIPOBJ-CenumStart 為列舉剪下區的剪下矩形設定引數 EngcreateDericeBitmap 使GDI對裝置點陣圖進行處理 EngcreatedeviceSurFace 透過GDI建立一個顯示驅動程式管理的裝置介面 EngDeleteSurface 通知GDI顯示驅動程式不再需要裝置介面 PALOBJ-C GetColors 將顏色複製到調色盤上 PATHDAT 部分繪製路徑的結構 PATHOBJ-Benum 由繪製路徑中列舉PATHDATA記錄 PATHOBJ-VenumStart 一個繪製路徑列舉它的線性部分 PATHOBJ-V GetBoints 返回繪製路徑的有限制矩形區 XLATEOBJ 用來在調色盤之間傳送色彩 XLATEOBJ-C GET PALETTE 由指定的調色盤返回顏色


顯示緩衝格式

  Windows CE GDI支援廣泛的色彩深度和色彩模式,由一色到可調的真32位RGB,每個格式也支援幾個畫素序,這依靠於顯示是否是1位、2位或4位的。

  所有的顯示緩衝格式,假定了顯示畫素順序從左到右、從上到下,即畫素(0,0)在左上角畫素(Wisth-1,height-1)在右下角。

1畫素位格式

  它為簡單的黑白顯示,0代表黑,1代表白。畫素被以位元組形式儲存,這樣畫素(0,0)被放在顯示記憶體第一個位元組最高位。

2畫素位格式

  雖然任何4-entry調色盤都可工作,但兩象素位格式是典型地用於作為4級灰度顯示,灰度級由下列表表示:

1位 0位 灰度級別 0 0 黑 0 1 灰 1 0 亮灰 1 1 白

4畫素位格式

  它通常是可調色格式,frame buffer可以2畫素/一位元組或1畫素/一位元組形式。

如果你選擇,一個畫素/位元組方式執行,驅動程式將以16色調色盤的8位/畫素的顯示模式,每個位元組中相關位為低位位元組,高位位元組全為0。


8畫素位格式

  它是可用軟體控制調色盤的制式,它把八位值對映成24位色。

  由於執行、相容性、影像質量原因,微軟推薦使用含有預設Windows CE調色盤。


15或16畫素位格式


  它是遮蔽格式,不可調色。對15或16位畫素畫素以每兩位元組儲存,15畫素位,浪費了每個字最高位,微軟推薦純紅、綠、藍的匹配如下:

顏色 15位(5-5-5RGB) 16位(5-6-5RGB) Red 0x7C00 0xF800 Green 0x3E00 0x07E0 Blue 0x001F 0x001F

在15位/畫素匹配符中,每個命令的低15位包含畫素資料,不用位為0。


24位/畫素格式

  它是真彩格式,每個畫素對紅、綠、藍各儲存8位,此種格式有其優點和不足,優點是影像質量好,因為每個畫素佔3位元組,他們不浪費記憶體,不足之處是既然設計中畫素一半穿越字元邊界,在聯連和解碼畫素時將引起操作後果。


32位/畫素格式

  它是另一種真彩格式,這種格式將不會使畫素超過D邊界,但記憶體利用不高,它有兩種方式安排色彩通道,一個是藍色作為每個畫素中最弱作用位元組,另一種是將紅色作為最弱作用位元組,與之相應為PAL-BGR和PAL-RGB模式,在每個畫素中你能抽取紅、綠、藍的下列匹配符合通道。

Color PAL_RGB Mask PAL_BGR Mask Red 0x000000FF 0x00FF0000 Green 0x0000FF00 0x0000FF00 Blue 0x00FF0000 0x000000FF


Windows CE顯示硬體推薦

  微軟公司推薦使用10種Windows CE的顯示硬體,這些硬體被證明是可操作的,並使你的顯示驅動程式開發變得更容易,即使你的硬體不是所推薦的,你仍能寫入一個完全功能的顯示,驅動程式,或如果它在產品設計後期難以更改硬體設計,代價是在驅動程式和/或減少操作上附加努力。

記憶體佈局

  微軟強烈推薦你顯示硬體使用線性frame緩衝區,你能夠向緩衝區讀和寫操作。所有的顯示器記憶體應該是連續、適合的,此外,應是一個線性聯接視窗覆蓋整個frame緩衝區,使用非微軟所推薦的硬體時,如果你選擇使用它,就需要對GPE類進實質性改動,詳細資訊參見本論文的使用GPE類部門。

  你的顯示硬體也要使用可支援的畫素格式,儲存和畫素序組合、詳細資訊,閱讀本論文的,顯示快取格式部分。這種顯示硬體frame緩衝應有如下性質:

  • 由上至下格式,畫素(0,0)在左上角,畫素(width-1,height-1)在右下方;
  • frame緩衝區,記憶體中用來代表顯示中的一個掃描行的位元組數,應該是一組四位元組,甚至用未用位元組來填充每個掃描行末端;
  • 整個frame緩衝區必須與可連線,而不用CPU執行空白選擇.
  • Frame緩衝區:不使用bit-planes,它的每個色彩通道或暗度都有分離frame緩衝區。

Dirty Rect緩衝區

  如果你希望使用GPE類來執行顯示驅動程式,但你的顯示硬體沒有被支援GPE類(例如,如果frame緩衝區非線性),然後你可能考慮寫“dirty rece driver”。

  在這個模式,GPE類維持一個記憶體中獨於裝置的點陣圖(DIB),它代表frame緩衝區,當記憶體的DIB被修改時,GPE將通知dirty rect driver,以複製DIB更改的或“dirty"部分到,顯示裝置進行轉換操作。

  Direy rect drivers以佔用記憶體和犧牲執行速度為代價,他們僅應做為支援硬體的最後手段,當這些硬體不能滿足GPE需求。

加速

  微軟推薦你使用能加速下列操作的顯示硬體,按重要性排列如下:

  • 實色填充,特別的Bit操作,它的pb0-isolid color數不是OXFFFFFFF。
  • SRCCOPY Bit操作;
  • 游標顯示,如果你的平臺使用游標;
  • 用子畫素繪製實線;
  • 匹配SRCCOPY Bit操作;
  • 其它的由Windows CE裝置執行影像操作。


總結

  在Windows CE 2.0中,顯示驅動程式在視覺化顯示技術中發生關鍵性作用,與本論文中提到的設計策略相協調的,顯示驅動程式和顯示硬體將允許基於Windows CE的裝置充分利用新GDI的增強影像顯示能力。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988092/,如需轉載,請註明出處,否則將追究法律責任。

相關文章