这部分主要包括 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函数对平面对象操作变为可能.

DirectDraw简介相关推荐

  1. DirectX简介 第二篇 DirectDraw简介

    DirectDraw简介 1.       DirectDraw是DirectX的基石,DirectX的其他组件,如Direct3D,都是建立在它的基础上的,用DirectDraw可以访问显卡上的内存 ...

  2. DirectDraw基础篇(学东西还是基础的好哦!)

    第一节 DirectDraw简介 Grubers的一个观点是DirectDraw"只是一个bltting发动机".这是相当准确的,但却太简化了.更准确地讲,DirectDraw是一 ...

  3. DirectDraw基础篇

    DirectDraw基础篇(学东西还是基础的好哦!) 第一节 DirectDraw简介 Grubers的一个观点是DirectDraw"只是一个bltting发动机".这是相当准确 ...

  4. DirectDraw 基础篇

    DirectDraw基础篇(学东西还是基础的好哦!) 第一节 DirectDraw简介 Grubers的一个观点是DirectDraw"只是一个bltting发动机".这是相当准确 ...

  5. 艾伟_转载:如何开发绚丽、高效率的界面(Windows嵌入式系统)

    上篇文章中提到用户体验(UE),并且说到国内有专门去做UE的团队也很少.据我了解Microsoft.Nokia.Google等,还有国内的Baidu是有比较专业的UE团队.对于我们这样的普通团队.普通 ...

  6. 游戏编程之四 diectxdarw基础篇

    视频课:https://edu.csdn.net/course/play/7621 第四章 diectxdarw基础篇 第一节 DirectDraw简介      Grubers的一个观点是Direc ...

  7. 【SDL】SDL简介

    1. SDL简介 SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成.SDL提供了数种控制图像.声音.输出入的函数,让开发者只要用相同或是相 ...

  8. 1、direct X 的简介

    下面的内容来自百度百科 简介编辑 Microsoft DirectX 是这样一组技术:它们旨在使基于Windows 的 计算机成为运行和显示具有丰富 多媒体元素(例如全色图形.视频.3D 动画和丰富音 ...

  9. Direct3D 12简介

    Direct3D 12简介 DirectX 12是Microsoft最新的DirectX API版本. Direct3D随DirectX 12一起提供,Direct3D 12是DirectX API集 ...

最新文章

  1. 【整理】OC中常用的关于时间格式的转换
  2. oracle emp数据库或数据误删恢复
  3. 《可爱的Python》读书笔记(五)
  4. BugkuCTF-Misc:眼见非实(ISCCCTF)
  5. shell编程之条件语句(文件测试,test命令,字符串和逻辑测试,if单支语句,if双支语句,if多支语句,case命令,用if写跑步小实验)
  6. jQuery(三) javascript跨域问题(JSONP解决)
  7. RuntimeError: readexactly() called while another coroutine is already waiting for incoming data
  8. 【Linux入门学习之】数据流重定向
  9. 【转】C#3.0入门系列(九)-之GroupBy操作
  10. java用二维数组编写地图_[Java] Java二维数组写一个超级简单的扫雷游戏,适合新手...
  11. 服务器挂存储系统启不,应用服务器重新启动后无法加载多路径软件
  12. 2006. 差的绝对值为 K 的数对数目
  13. 数学常用公式及规律、结论(一)
  14. c++ 链表_Thinking--从尾到头打印链表
  15. java clh_Java多线程编程CLH锁详解
  16. 面试官:你在平时的工作中遇到过哪些问题让你印象深刻?
  17. java操作es聚合操作并显示其他字段_深入浅析Elasticsearch中的聚合操作
  18. 信创云领未来,华云数据打造科技强国新基座
  19. redis expire方式设置缓存时间的坑
  20. EOS智能合约开发系列(18): 狼人杀游戏的`eosio.code`

热门文章

  1. java学期总结_JavaWeb学期总结
  2. C语言课程设计之停车场管理问题
  3. Configuration space(C-Space)
  4. 在ArcGIS Engine 应用程序中加载搜狗地图和谷歌地图
  5. springboot-study
  6. linux安装虚拟机与常用命令
  7. 微信小程序开发之——weui-wxss的使用
  8. 面试:死锁的条件以及解除方法
  9. Use migrate in Go project(golang-migrate/migrate)
  10. C语言之贪心算法疯牛