`

《Windows游戏编程大师技巧》五、DirectX基础知识和令人生畏的COM

 
阅读更多


所有的DirectX组件都是以COM实现的,两者环环相扣。

DirectX基础

DirectX可能会让身为程序员的你丧失些对硬件的控制能力,但是DirectX比Windows系统自带
的GDI或MCI快上很多倍,并且也更稳定。在编写Windows游戏的过程中,使用DirectX的方法
要干净和优雅得多。



你只要向DirectX发出命令,它就会帮你处理所有细节问题。无论是显卡、声卡、键盘鼠标
还是网卡,只要是DirectX支持的硬件,就可以被你的程序使用而无需知道其中的奥秘。
DirectX是如何工作的呢?通过COM技术,以及一套由微软和硬件厂商共同编写的驱动库就
可以实现。硬件商必须遵守微软的协议才能开发与硬件通信的驱动程序。

DirectX已经包含了许多组件,包括DirectDraw、DirectSound、DirectInput、DirectShow等等。



从上图中可以看到在DirectX 8.0版本里,DirectDraw和Direct3D合并为DirectX Graphics。而DirectSound和
DirectMusic合并为DirectX Audio。并且DirectShow也集成到DirectX里。虽然有很多版本,但我们可以通过
COM决定究竟使用DirectX 3.0、5.0、6.0或是其他版本。并且各版本只是有些许的差别,学会一个版本就
能够掌握其他的(除了Direct3D)。但本书不会太多涉及DirectX的内容,毕竟你的整个游戏编程生涯并不会
与DirectX绑在一起。当你以后使用其他API时仍然可以理解游戏编程的基础技术,这才是本书的终极目标

从上图中还会发现,DirectX下有两个层叫做HEL(硬件仿真层)和HAL(硬件抽象层)。HAL直接和硬件对话,
是硬件商提供的设备驱动程序。当硬件支持你要求的功能时HAL才被使用,可以通过DirectX调用直接和它通信。
例如当你要求绘制一个位图时,硬件数据块复制器能迅速完成这个任务,比软件循环高效得多。HEL则是当硬件
不支持你要求的功能时被使用。比如当硬件不支持位图旋转时,HEL就会通过软件运算来完成该项任务。显然
这样处理速度会慢,但关键是这样不会因为硬件不支持而影响你的程序。另外,HAL和HEL之间的切换对用户而言
是透明的。

你能想象自行编写驱动程序来支持市场上所有显卡吗?这需要数千人年的工作量,事实上也是不可能完成的。
DirectX的确是微软和所有硬件商倾注了大量研究和努力的成果,它是超高性能的标准。


COM:是微软还是魔鬼的杰作?

虽然C++有许多很酷的OO功能,但很多人仍然不使用或者用错。因此大规模程序的
编写仍然是个问题,这也是COM模型要解决的困难之一。当修改或升级一部分代码时,
必须要重新编译生成一个可执行文件,这也是COM要解决的另一个问题。不用重新编译
程序就能升级COM模块,即插即用。这项技术在底层非常复杂,编写自己的COM对象也
非常有挑战性,但是COM对象使用起来却是非常容易的。

一个COM对象事实上就是一套实现了大量接口的C++类。这些接口用于和COM对象交互。
所有接口必须从一个名为IUnknown接口继承而来。

struct IUnknown
{
virtual HRESULT __stdcall QueryInterface(const IID &iid, (void**)ip);
virtual ULONG __stdcall AddRef() = 0;
virtual ULONG __stdcall Release() = 0;
}

QueryInterface根据一个128位的接口标识符iid来返回请求的接口。
AddRef和Release管理引用计数器跟踪当前COM对象生命周期。

COM的设计者只是使用虚C++类来实现COM,而不要求用户也必须使用C++来
访问或者创建它们。只要你创建的是一个和Microsoft C++编译器在创建虚C++
类时所创建的二进制映像一样的映像,这个COM对象就可以兼容。

来看一个可以运行的COM对象实例。


DirectX的COM对象有很多。这些COM对象在安装DirectX时作为动态链接库DLL
包含在你的系统中。当运行DirectX游戏时,程序会装载DLL,请求接口,然后
接口的实现函数会被调用从而完成任务。编译时,不需要调用CoCreateInstance
函数,也不需要对COM进行初始化,从而从操作COM的沉闷工作中解脱出来。
因此编译时要包含一些库函数.LIB文件,应用程序与DLL中COM对象的桥梁。


分享到:
评论

相关推荐

    Windows游戏编程大师技巧——翻译.pdf

    总的来说,Windows游戏编程大师技巧的历程是从早期的简单游戏到现代复杂、互动性强的3D游戏的转变,伴随着技术的进步和工具的完善,游戏开发已经成为一个涵盖多个领域的专业领域,吸引了无数创新者和爱好者投身其中...

    Windows游戏编程大师技巧(第二版)源码及美术素材

    《Windows游戏编程大师技巧(第二版)》是一本深度探讨Windows平台上游戏开发的专业书籍,它提供了丰富的源码和美术素材,旨在帮助读者深入理解游戏开发的各个环节。此资源包包括了作者精心编写的源代码以及用于游戏...

    Windows游戏编程大师技巧(第二版) 源码

    《Windows游戏编程大师技巧(第二版) 源码》是一个专为Windows平台游戏开发人员设计的资源,其中包含了丰富的代码示例和实践项目,帮助读者深入理解游戏开发的各个环节。这个压缩包很可能是书籍配套的实践教程,通过...

    Windows游戏编程大师技巧(第二版)完整版光盘文件04

    《Windows游戏编程大师技巧(第二版)》是一本深度探讨Windows平台上游戏开发的权威书籍,其完整版光盘文件包含了丰富的资源,旨在辅助读者更好地理解和实践书中的理论知识。光盘内容共分为九个主要部分,分别是:...

    Windows游戏编程大师技巧第二版.pdf

    ### Windows游戏编程大师技巧第二版 #### 一、Windows平台游戏开发概述 1. **Windows平台特点**: - Windows作为全球最流行的操作系统之一,拥有庞大的用户基础。 - 其API(应用程序编程接口)丰富多样,为...

    Windows游戏编程大师技巧——2D和3D游戏编程基础.zip

    本资源包“Windows游戏编程大师技巧——2D和3D游戏编程基础”旨在帮助初学者快速掌握游戏开发的核心技能,提升至专业水平。下面我们将深入探讨其中涉及的重要知识点。 1. **Windows编程基础**:在Windows上开发游戏...

    windows游戏编程大师技巧源码

    《Windows游戏编程大师技巧》是一本经典的游戏开发书籍,它主要涵盖了使用DirectX技术进行游戏编程的各个方面。这本书深入浅出地介绍了如何在Windows平台上构建高性能、交互性强的游戏应用程序。对于那些想要进入...

    Windows游戏编程大师技巧, 2D和3D游戏编程基础教程。

    本教程将深入探讨2D和3D游戏编程的基础,帮助初学者建立起坚实的技术基础,同时也为经验丰富的开发者提供一些实用的技巧和最佳实践。 一、Windows游戏开发环境搭建 1. 安装开发工具:Visual Studio是常见的Windows...

    [Windows游戏编程大师技巧(第二版)

    《Windows游戏编程大师技巧(第二版)》是André LaMothe所著的一本经典游戏编程书籍,专注于在Windows平台上进行游戏开发的技术和策略。这本书是面向已经具备一定编程基础,尤其是C++基础的读者,旨在提升他们创建...

    《Windows游戏编程大师技巧》源码

    《Windows游戏编程大师技巧》是一本深受欢迎的书籍,它为读者揭示了Windows平台上游戏开发的奥秘。这本书的核心在于其丰富的源码示例,这些示例覆盖了从基础到高级的各种游戏编程技术。源码是学习编程最直观的方式,...

    windows游戏编程大师技巧chapter6

    在Windows游戏编程领域,"Windows游戏编程大师技巧Chapter6"主要涵盖了使用Visual C++和DirectX进行游戏开发的关键技术。这一章通常会深入探讨Win32应用程序接口(API)和DirectX多媒体库的使用,以实现高效的游戏...

    Windows游戏编程大师技巧(第二版)源码

    《Windows游戏编程大师技巧(第二版)》是一本深度探讨Windows平台上游戏开发的权威书籍,其源码提供了丰富的实例和实践教程,对于想要深入学习Windows游戏编程的开发者来说,是宝贵的资源。源码包含了作者精心设计和...

    Windows游戏编程大师技巧(第二版)

    《Windows游戏编程大师技巧(第二版)》是André LaMothe所著的一本经典游戏编程书籍,旨在帮助读者深入理解和掌握在Windows平台上进行游戏开发的技术与策略。这本书全面覆盖了从基础知识到高级技巧的各个层面,对于...

    Windows游戏编程大师技巧源码

    《Windows游戏编程大师技巧源码》是一份宝贵的资源,它为初学者和有经验的开发者提供了从零开始构建DirectX游戏及游戏引擎的详细步骤。这份资料通过一系列章节的源代码,逐步引领读者深入理解游戏开发的核心技术。...

    Windows游戏编程大师技巧(CHM)

    第一部分为Windows编程基础,包括概述、 Windows编程、GDI、控件等知识,第二部分为DirectX和2D基础,接触了用DirectX进行各种控制及二维平面中变换的知识,第三部分编程核心则重点介绍了相关的数学、物理原理及如何...

    WINDOWS游戏编程大师技巧中文版(第二版).rar

    《WINDOWS游戏编程大师技巧中文版(第二版)》是一本专为中文读者设计的游戏编程教程,旨在帮助初学者和进阶者深入理解Windows平台上的游戏开发技术。这本书以清晰易懂的方式介绍了游戏编程的核心概念、技术和实践方法...

Global site tag (gtag.js) - Google Analytics