DirectDraw简介

来源:互联网 发布:excel删除公式保留数据 编辑:程序博客网 时间:2024/05/14 18:35

这部分主要包括 DirectDraw 组成, 操作系统及系统硬件之间联系. 有以下一些主题:
结构纵观
DirectDraw对象类型
硬件操作层(HAL)
软件摸拟
系统组成
结构纵观
  多媒体软件需要高度优化的图形. 通过DirectDraw, Microsoft 使在Windows上的应用程序获得一个高级有效率高速的图形操作变为可能, 硬件系统可以的话, DirectDraw将提供以下一些功能:
操作多个面
直接访问显存
页交换
屏后缓冲
调色板管理
剪切
  另外DirectDraw使你在运行时对硬件性能进行查询, 从而相对系统硬件给予最大优化.
  DirectDraw 会使用一切硬件功能, 并在硬件不支持的特性时给予软件虚拟. 系统会尽量使用硬件操作层(HAL), 详见硬件操作层(HAL)
  DirectDraw 组件是通过基于COM接口进行服务的. 最新的接口是IDirectDraw4, IDirectDrawSurface4, IDirectDrawPalette, IDirectDrawClipper及IDirectDrawVideoPort. 注意: 在这些新的接口之前的老接口, DirectDraw仍然支持. DirectDraw组件并不包含IDirectDraw3接口, 接口版本从IDirectDraw2跳到IDirectDraw4.
  DirectDraw通过IDirectDraw, IDirectDraw2, IDirectDraw4接口来操作显示适配器. 大多数情况下你要使用DirectDrawCreate函数来创建一个DirectDraw对象, 也可用CoCreateInstance COM函数来创建. 详见用CoCreateInstance来创建DirectDraw对象.
  在创建好DirectDraw 对象后就可以用IDirectDraw4::CreateSurface宏来创建一个平面. 平面将显存的内容表现出来, 也可以表现系统内存. DirectDraw 的其他接口扩展了调色板的支持, 剪切(使用在窗口式应用程序), 及视频端口. 
DirectDraw 对象类型
  你可以这样想, DirectDraw是由多个对象协同工作. 这部分简单介绍了你将要使用的对象. 详见DirectDraw核心.
DirectDraw 对象
DirectDraw 对象是 DirectDraw 应用程序的核心. 这是你首先需要创建的对象, 并且使用他来创造其他有关的对象. 使用DirectDrawCreate函数来创建DirectDraw对象. DirectDraw对象通过IDirectDraw, IDirectDraw2及IDirectDraw4来实现. 详见DirectDraw对象. 
DirectDrawSurface 对象
DirectDrawSurface 对象(归于平面) 表现一个内存区域包含要显示的或移动到其他平面的图象数据. 通常通过调用 DirectDraw 对象中的IDirectDraw4::CreateSurface宏. DirectDrawSurface 对象通过IDirectDrawSurface, IDirectDrawSurface2, IDirectDrawSurface4接口来实现. 详见平面. 
DirectDrawPalette 对象
DirectDrawPalette对象 (归于调色板) 表示一个平面所使用的16-色或256-色的调色板索引值. 它包含一组平面所使用的由三个数据组成的RGB描述色. 大于8-Bits色你就毫无必要使用平面的调色板. 你可通过调用 IDirectDraw4::CreatePalette来创建DirectDrawPalette对象. DirectDrawPalette对象通过IDirectDrawPalette接口来实现. 详见调色板. 

DirectDrawClipper 对象
DirectDrawClipper 对象(归于剪切) 帮你移动位图到指定平面或绑定平面之上. 你可以通过调用IDirectDraw4::CreateClipper宏来创建DirectDrawClipper对象. DirectDrawClipper对象通过IDirectDrawClipper接口来实现. 详见图象剪切. 
DirectDrawVideoPort 对象
DirectDrawVideoPort对象表示了一些系统的硬件图形端口. 这种硬件允许直接访问贞缓冲而无须通过CPU或PCI总线. 你可以通过 DirectDraw 对象调用QueryInterface宏来实现DirectDrawVideoPort, 指定IID_IDDVideoPortContainer关联标识符. DirectDrawVideoPort 对象通过IDDVideoPortContainer及IDirectDrawVideoPort接口来实现. 详见视频端口.
硬件操作层(HAL)
  DirectDraw 通过硬件操作层(HAL)提供设备索引. HAL是特殊设备接口, 由硬件厂商提供, DirectDraw可以直接操作硬件. 程序无须与HAL进行接触. 相反, 通过HAL提供的基础结构, DirectDraw使用相同的结构让应用程序来显示图形. 硬件制造商在Windows下实现的HAL包含16-bit及32-bit的代码. 在Windows NT下, HAL则是纯32-bit的代码. HAL可以是显示卡驱动程序的一部分或单独的动态衔接库(DLL), 以驱动程序的接口来通信, 接口是由驱动程序设计者定义的.
  DirectDraw 的HAL是有晶片制造商、主要生产者及 OEM(Original Equipment Manufacturer) 所创建的. HAL完全依靠设备优化. 如果硬件不支持某个功能, HAL并不会报告. 另外HAL不验证传递的参数. DirectDraw就是在调用HAL之前完成这些工作的.
软件摸拟
  当通过硬件操作层(HAL)硬件无法支持某些特性, DirectDraw 就试图对其进行模拟. 这个功能是通过硬件模拟层 (Hardware Emulation Layer [HEL]) 来实现的. HEL提供的与HAL相同的功能. 还有, 在HAL, 程序并不直接与HEL工作. 在主要功能上其结果大体相同, 而程序不必理会是由硬件提供的还是HEL模拟的.
  很明显, 软件模拟在性能上无法与硬件提供特性相比. 你可以用 IDirectDraw4::GetCaps 宏来查询硬件支持的特性. 通过初始化时的查询, 你可以适当改变参数来对不同性能的硬件进行优化.
  但有时硬件操作与软件摸拟的组合反而比用纯软件模拟更慢. 例如: 显示驱动程序支持 DirectDraw 但不支持伸拉位图 (Stretch Blitting), 明显会在用显存进行伸拉位图时损失性能. 因为通常显存会比系统内存慢, 在操作显存时会使CPU处于等待状态. 如果程序并不使用硬件支持的特性, 有时在系统内存上创建平面更好, 从而绕过CPU在操作显存时的性能损失. 详见硬件操作层.
系统组成

  下面这幅图显示了DirectDraw, 图形设备接口 (Graphics Device Interface[GDI]), 硬件操作层(Hardware Abstraction Layer[HAL]), 硬件模拟层 (Hardware Emulation Layer[HEL] 及硬件(Hardware)之间的关系.


就象上图所显示, DirectDraw对象与GDI并排存在, 并且各自有操作硬件的设备操作层. 不象GDI, DirectDraw会使用特殊硬件特性如果可以的话. 如果硬件不支持, DirectDraw就会用HEL对其进行模拟. DirectDraw可以提供平面内存的设备文本, 使你用GDI函数对平面对象操作变为可能.

0 0
原创粉丝点击