介绍
Microsoft 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)为微软Windows NT的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 Drivers子部分。
Windows CE显示驱动程序在许多方式上与通常的设备驱动程序不同,最主要不同是他们不暴露I/O接口。因此,他们不能被设备管理器管理,因此寄存器从来不能被它们调用。结果,这没有特别设备文件或其它文件系统记录,以与活动显示驱动程序相协调,显示驱动程序装载的机制是一个使用显示驱动程序的应用软件,调用带有显示驱动程序名的Create DC函数动态链接文件。这使Windows CE能装载显示驱动程序,并初始化以使设备上下文能够返回调用应用默认的显示驱动程序,当然是自动加载。
DDI函数
下面表格列举了显示和打印驱动程序的DDI函数显示驱动程序,应执行此处列举的全部显示DDI函数。打印驱动程序则应执行全部的打印DDI函数。然而,仅有Drve Enable Drive必须由显示驱动程序的动态链接库(DLL)输出。所以,仅有DrvEnableDrive必须有名称,其它函数可随意调用,因为他们由Drr Enable Driver返回的,函数指针输出到GDI,无论谁被调用,总是跟随定义在Win DDI.H文件中的原型。
使用GPE类
标准显示驱动程序使用图形引擎工程(GPE)类,当GPE类可选择时,使用它们可很容易处理写入显示驱动程序,如果你使用GPE类,你仅需提供所需新代码,来使显示硬件功能正常操作加速。
GPE类需要你的显示硬件使用一个flat frame缓冲区,也就是显存必须位于一个邻近的内存范围,修正GPE类来使用一个非连续frame buffer将很费力气。
为创建一个基于GPE类显示驱动程序,用下述步骤:
为项目设一子目录;
由标准驱动目录,例如S3Trio64目录复制文件到你的项目目录;
全面更改文件中设定设备名,例如将“S3Trio64”改为你的设备名;
更改config.cpp以使它把你的显示设备,放在一个线性frame-buffer模式;
使指定硬件加速失效;
建立并测试这些非加速驱动程序GPE,将用软件产生输出;
加入你的硬件加速模式。
GDI提供的支持显示驱动程序服务
Windows CE GDI以预先定义函数结构和一些独立C函数形式,提供服务支持显示驱动程序,预定制结构提供毛刷、剪切区、调色板、删除和填充路径、转化的支持、独立的C函数提供设备位图和界面支持。
显示缓冲格式
Windows CE GDI支持广泛的色彩深度和色彩模式,由一色到可调的真32位RGB,每个格式也支持几个像素序,这依靠于显示是否是1位、2位或4位的。
所有的显示缓冲格式,假定了显示像素顺序从左到右、从上到下,即像素(0,0)在左上角像素(Wisth-1,height-1)在右下角。
1像素位格式
它为简单的黑白显示,0代表黑,1代表白。像素被以字节形式存储,这样像素(0,0)被放在显示内存第一个字节最高位。
2像素位格式
虽然任何4-entry调色板都可工作,但两象素位格式是典型地用于作为4级灰度显示,灰度级由下列表表示:
4像素位格式
它通常是可调色格式,frame buffer可以2像素/一字节或1像素/一字节形式。
如果你选择,一个像素/字节方式执行,驱动程序将以16色调色板的8位/像素的显示模式,每个字节中相关位为低位字节,高位字节全为0。
8像素位格式
它是可用软件控制调色板的制式,它把八位值映射成24位色。
由于运行、兼容性、图像质量原因,微软推荐使用含有默认Windows CE调色板。
15或16像素位格式
它是屏蔽格式,不可调色。对15或16位像素像素以每两字节存储,15像素位,浪费了每个字最高位,微软推荐纯红、绿、蓝的匹配如下:
在15位/像素匹配符中,每个命令的低15位包含像素数据,不用位为0。
24位/像素格式
它是真彩格式,每个像素对红、绿、蓝各存储8位,此种格式有其优点和不足,优点是图像质量好,因为每个像素占3字节,他们不浪费内存,不足之处是既然设计中像素一半穿越字符边界,在联连和解码像素时将引起操作后果。
32位/像素格式
它是另一种真彩格式,这种格式将不会使像素超过Dword边界,但内存利用效率不高,它有两种方式安排色彩通道,一个是蓝色作为每个像素中最弱作用字节,另一种是将红色作为最弱作用字节,与之相应为PAL-BGR和PAL-RGB模式,在每个像素中你能抽取红、绿、蓝的下列匹配符合通道。
Windows CE显示硬件推荐
微软公司推荐使用10种Windows CE操作系统的显示硬件,这些硬件被证明是可操作的,并使你的显示驱动程序开发变得更容易,即使你的硬件不是所推荐的,你仍能写入一个完全功能的显示,驱动程序,或如果它在产品设计后期难以更改硬件设计,代价是在驱动程序和/或减少操作上附加努力。
内存布局
微软强烈推荐你显示硬件使用线性frame缓冲区,你能够向缓冲区读和写操作。所有的显示器内存应该是连续、适合的,此外,应是一个线性联接窗口覆盖整个frame缓冲区,使用非微软所推荐的硬件时,如果你选择使用它,就需要对GPE类进实质性改动,详细信息参见本论文的使用GPE类部门。
你的显示硬件也要使用可支持的像素格式,存储和像素序组合、详细信息,阅读本论文的,显示缓存格式部分。这种显示硬件frame缓冲应有如下性质:
由上至下格式,像素(0,0)在左上角,像素(width-1,height-1)在右下方;
frame缓冲区,内存中用来代表显示中的一个扫描行的字节数,应该是一组四字节,甚至用未用字节来填充每个扫描行末端;
整个frame缓冲区必须与CPU可连接,而不用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的增强图像显示能力。
本文地址:http://com.8s8s.com/it/it3868.htm