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

原创 2001年04月14日 12:53:00

二、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函数来处理表面对象。

DirectX5.0最新游戏编程指南 DirectDraw教程篇 一、配置DirectX SDK

 DirectX5.0最新游戏编程指南DirectDraw教程篇    DirectX是为Visual C++的用户准备的,因此要编制DirectDraw游戏程序,最好对VC要有一定的了解。不愿意使用...
  • holyfire
  • holyfire
  • 2001年04月16日 09:37
  • 3292

DirectX5.0最新游戏编程指南 DirectDraw教程篇 二、第一个DirectDraw实例

二、第一个DirectDraw实例    要使用DirectDraw,首先必须创建DirectDraw对象的一个实例来表征计算机上的显示适配卡,然后使用接口方法来处理对象。另外还需要创建一个或多个Di...
  • holyfire
  • holyfire
  • 2001年04月16日 09:38
  • 2191

DirectX5.0最新游戏编程指南 DirectDraw篇(转)

    DirectDraw是DirectX SDK的主要部分之一,它允许你直接对显示内存操作,支持硬件位块传输、硬件覆盖、表面翻转,并且保持同目前的基于Windows的应用程序和驱动程序兼容。   ...
  • hollysky
  • hollysky
  • 2005年03月30日 14:43
  • 1509

DirectX5.0最新游戏编程指南 DirectDraw篇 四、DirectDraw高级特性

四、DirectDraw高级特性1、直接内存访问DMA    有些显示设备能够在系统内存表面支持位块传输操作(或其它操作),这些操作就是直接内存访问DMA(Direct Memory Access)。...
  • holyfire
  • holyfire
  • 2001年04月16日 09:36
  • 1909

DirectX5.0最新游戏编程指南 DirectDraw教程篇二

DirectDraw教程篇    DirectX是为Visual C++的用户准备的,因此要编制DirectDraw游戏程序,最好对VC要有一定的了解。不愿意使用VC的用户也可以利用消息Arakeli...
  • yourlin
  • yourlin
  • 2006年08月21日 17:50
  • 1100

DirectX5.0最新游戏编程指南 DirectDraw教程篇 五、DirectDraw中其它的DirectDraw范例

五、DirectDraw中其它的DirectDraw范例    要熟练掌握有关DirectDraw的应用,还应该多研究包含在DirectX SDK:之中的下述范例。1、Stretch描述了怎样在一个窗...
  • holyfire
  • holyfire
  • 2001年04月16日 09:40
  • 1057

DirectX5.0最新游戏编程指南 DirectDraw教程篇四

 四、使用覆盖表面  本例将使用DirectX SDK包含的Mosquito范例程序一步一步地说明怎样在程序中使用DirectDraw和硬件支持的覆盖表面。Mosquito使用覆盖表面的翻转链而没有位...
  • yourlin
  • yourlin
  • 2006年08月21日 17:56
  • 899

DirectX5.0最新游戏编程指南 DirectDraw教程篇 三、创建动画

三、创建动画    上面的例子都只是将数据写入后台缓冲区,然后将后台缓冲区与主表面翻转,其速度并不太快。下面的例子DDEX4和DDEX5优化了实时功能,使看起来更象一个真正的游戏。DDEX4显示了怎样...
  • holyfire
  • holyfire
  • 2001年04月16日 09:39
  • 1085

DirectX5.0最新游戏编程指南 DirectDraw教程篇三

三、创建动画    上面的例子都只是将数据写入后台缓冲区,然后将后台缓冲区与主表面翻转,其速度并不太快。下面的例子DDEX4和DDEX5优化了实时功能,使看起来更象一个真正的游戏。DDEX4显示了怎样...
  • yourlin
  • yourlin
  • 2006年08月21日 17:55
  • 865

DirectX5.0最新游戏编程指南 DirectDraw教程篇五

五、DirectDraw中其它的DirectDraw范例    要熟练掌握有关DirectDraw的应用,还应该多研究包含在DirectX SDK:之中的下述范例。1、Stretch描述了怎样在一个窗...
  • yourlin
  • yourlin
  • 2006年08月21日 17:57
  • 830
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DirectX5.0最新游戏编程指南 DirectDraw篇 二、DirectDraw的体系
举报原因:
原因补充:

(最多只允许输入30个字)