分享
 
 
 

显示驱动程序和硬件

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

微软 Windows CE显示驱动程序和硬件

介绍

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文件中的原型。

函数

用途

DrvAnyBlt

有扩展或透明位块传送

DrvBitPlt

有剪切和屏蔽的通常位块传送

Drv ConstrostControl

允许软件、硬件对照调整

DrvCopyBits

发送GDI设计的打印段到打印驱动程序

DrvCreateDeviceBitmap

设计和管理位图

DrvDeleteDeviceBitmap

删除设计位图

DrvDisableDriver

通知驱动程序GDI不再需要它,并准备卸载它

DrvDisableP.D.Ev.

通知驱动程序GDI不再需要特殊打印或显示设备

DrvDisableSwrface

通知驱动程序GDI不再需要特殊绘制表面

DrvEnableDriver

由驱动程序输出初始记录,为GDI的DDI函数返回指针

DrvEnablePDEv

为GDI返回一个PDEV,它是一个物理显示设备的逻辑表示

DrvEnablesface

设计一个绘制界面,并把它与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类显示驱动程序,用下述步骤:

为项目设一子目录;

由标准驱动目录,例如S3Trio64目录复制文件到你的项目目录;

全面更改文件中设定设备名,例如将“S3Trio64”改为你的设备名;

更改config.cpp以使它把你的显示设备,放在一个线性frame-buffer模式;

使指定硬件加速失效;

建立并测试这些非加速驱动程序GPE,将用软件产生输出;

加入你的硬件加速模式。

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位/像素格式

它是另一种真彩格式,这种格式将不会使像素超过Dword边界,但内存利用效率不高,它有两种方式安排色彩通道,一个是蓝色作为每个像素中最弱作用字节,另一种是将红色作为最弱作用字节,与之相应为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可连接,而不用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的增强图像显示能力。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有