分享
 
 
 

DirectX5.0最新游戏编程指南 DirectDraw篇 二、DirectDraw的体系

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

二、DirectDraw的体系

多媒体软件要求高性能的图象。通过DirectDraw,Microsoft使得对图象敏感性的程序在速度和效率上都比在GDI上有了大大是提高,同时又保持了设备无关性,DirectDraw提供的工具能完成如下的关键任务:

.操作多个显示表面

.直接存取视频内存

.页翻转

.后台缓冲

.调色板的管理

.剪切

另外,DirectDraw在运行时允许你查询显示硬件的性能然后提供显示设备所能够支持的最佳效能。

DirectDraw提供了基于COM的服务接口,使用最多的是IDirectDraw2、IDirectDrawSurface3、IDirectDrawPalette、IDirectDrawClipper和IDirectDrawVideoPort。除了这些接口外,DirectDraw继续支持以前版本的接口。

DirectDraw对象表征了显示适配器,通过IDirectDraw和IDirectDraw2接口揭示其方法。在大多数情况下,你可以使用DirectDrawCreate函数来创建一个DirectDraw对象,也可以使用COM函数CoCreateInstance。

创建了DirectDraw对象后,你可以调用IDirectDraw2::CreateSurface方法为该对象创建表面。表面表征了显示硬件上的内存,既可以是视频内存,也可以是系统内存。DirectDraw通过其它的接口扩展了对调色板、剪切及视频端口的支持。

1、DirectDraw的对象类型

DirectDraw对象既可以是一个单独的对象,也可以是几个对象的组合。最新版本的DirectDraw有以下类型的对象:

1.1、DirectDraw对象

DirectDraw对象是DirectDraw应用程序的核心,它是你创建的第一个对象。创建了DirectDraw对象后,可以在它的基础上创建其它所有相关的对象。创建DirectDraw对象的函数是DirectDrawCreate。

1.2、DirectDrawSurface对象

DirectDrawSurface对象表征了一块内存区域,在该区域的数据将作为图象显示在屏幕上或移动到其它表面上。创建DirectDrawSurface对象的方法是 IDirectDraw2::CreateSurface,其它相关的方法可通过接口 IDirectDrawSurface, IDirectDrawSurface2和IDirectDrawSurface3得到。

1.3、DirectDrawPalette对象

DirectDrawPalette对象(有时也指的是“palette”)表征了一个用于表面的16色或256色的索引调色板,它包含了一系列描述同表面相关的RGB颜色索引值。创建DirectDrawPalette对象的方法是IDirectDraw2::CreatePalette。可以从接口IDirectDrawPalette获取其它的方法。

1.4、DirectDrawClipper对象

DirectDrawClipper对象(有时指的是“clipper”)帮助你禁止向表面的某一位置或超出表面的位置块写数据,创建DirectDrawClipper的方法是 IDirectDraw2::CreateClipper,其它相关的方法可从接口 IDirectDrawClipper中获取。

1.5、DirectDrawVideoPort对象

DirectDrawVideoPort对象表征了一些系统只具有的视频端口硬件,该硬件允许直接访问帧缓冲区而不需要访问CPU或使用PCI总线。

你可以先指定IDDVideoPortContainer标志,再调用QueryInterface方法来创建 DirectDrawVideoPort对象。其它相关的方法可从接口IDDVideoPortContainer和IDirectDrawVideoPort中获得。

2、硬件抽象层HAL(Hardware Abstraction Layer)

DirectDraw通过硬件抽象层HAL提供了设备无关性。HAL是一种特殊的设备接口,由设备生产厂商提供。DirectDraw利用HAL直接在显示设备上工作。应用程序并不同HAL交互。设备制造厂商以Windows95下的16位或32位代码的形式提供HAL,在WindowsNT下,

HAL是32位代码。HAL可以是显示驱动程序的一部分,也可以是通过制造商定义的私有接口同显示驱动程序通信的动态链接库DLL。

DirectDraw HAL由芯片、板卡或OEM(Original Equipment Manufacturer)提供。HAL只提供了设备相关性代码,执行时没有仿真。如果一种功能不被硬件支持,HAL将不把该功能作为硬件性能的一部分处理。另外,HAL不对参数进行证实,DirectDraw会在调用HAL之前完成参数的证实工作。

3、软件仿真(Software Emulation)

当硬件HAL不支持某一特性时,DirectDraw就尝试用软件来仿真这一特性。该仿真功能是由硬件仿真层HEL(Hardware-Emulation Layer)提供的。显然,软件仿真并不等同于硬件本身具有的特性。你可以用IDirectDraw2::GetCaps方法来查询硬件所支持的特性。

有时,硬件固有的特性和软件仿真二者的结合比单独使用软件仿真的速度还要慢。例如,如果显示设备驱动程序支持DirectDraw但不支持拉伸块写方式,当从视频内存表面拉伸或位块传输时就会产生性能上的损失。因为视频内存通常比系统内存的速度要慢,在访问视频内存时CPU必须要等待。因此,如果你的应用程序使用了硬件未能提供的特性,最好在系统内存中创建表面,以避免CPU访问视频内存时出现的性能损失情况。

4、系统组成(System Integration)

下图显示了DirectDraw、图形设备接口GDI、硬件抽象层HAL、硬件仿真层HEL和硬件之间的关系。

如图中所示,一个DirectDraw对象同GDI是并列关系,两者都通过设备相关抽象层访问硬件。同GDI不同的是,DirectDraw只要有可能就会充分利用硬件提供的特有功能。如果硬件不支持某一特性,DirectDraw还会尝试用HEL来仿真。DirectDraw也能以设备上下文(Device Context)的形式提供表面内存,是你能够使用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- 王朝網路 版權所有