4.1 准备工作
Direct3D 的初始化过程要求我们熟悉一些基本的 Direct3D 类型和基本绘图概念;本章
第一节会向读者介绍些必要的基础知识。然后我们会详细讲解 Direct3D 初始化过程中的每
一个必要步骤,并顺便介绍一下实时绘图应用程序必须使用的精确计时和时间测量。最后,
我们将讨论一下示例框架代码,它是本书所有演示程序使用的统一编程接口。
学习目标:
对 Direct3D 在规划调度 3D 硬件方面所起的作用有一个基本了解。
理解 COM 在 Direct3D 运行时起到的作用。
学习基本的绘图概念,比如 2D 图像的存储方式、页面翻转、深度缓存和多重采样。
学习如何使用性能计数器函数来获取高精度的计时器读数。
阐述 Direct3D 的初始化过程。
熟悉本书所有演示程序采用的通用应用程序框架结构。
Direct3D 的初始化过程要求我们熟悉一些基本的绘图概念和 Direct3D 类型。我们会在
本节讲解这些概念和类型,以使读者可以顺利地阅读之后的章节。
4.1.1 Direct3D 概述
Direct3D 是一种底层绘图 API(application programming interface,应用程序接口),
它可以让我们可以通过 3D 硬件加速绘制 3D 世界。从本质上讲,Direct3D 提供的是一组软
件接口,我们可以通过这组接口来控制绘图硬件。例如,要命令绘图设备清空渲染目标(例
如屏幕),我们可以调用 Direct3D 的 ID3D11DeviceContext::ClearRenderTargetView 方法来
完成这一工作。Direct3D 层位于应用程序和绘图硬件之间,这样我们就不必担心 3D 硬件的
实现细节,只要设备支持 Direct3D 11,我们就可以通过 Direct3D 11 API 来控制 3D 硬件了。
支持 Direct3D 11 的设备必须支持 Direct3D 11 规定的整个功能集合以及少数的额外附加
功能(有一些功能,比如多重采样数量,仍然需要以查询方式实现,这是因为不同的 Direct3D
硬件这个值可能并不一样)。在 Direct3D 9 中,设备可以只支持 Direct3D 9 的部分功能;所
以,当一个 Direct3D 9 应用程序要使用某一特性时,应用程序就必须先检查硬件是否支持该
特性。如果要调用的是一个不为硬件支持 Direct3D 函数,那应用程序就会出错。而在 Direct3D
11 中,不需要再做这种设备功能检查,因为 Direct3D 11 强制要求设备实现 Direct3D 11 规
定的所有功能特性。
4.1.2 COM
组件对象模型(COM)技术使 DirectX 独立于任何编程语言,并具有版本向后兼容的特
性。我们经常把 COM 对象称为接口,并把它当成一个普通的 C++类来使用。当使用 C++编
写 DirectX 程序时,许多 COM 的底层细节都不必考虑。唯一需要知道的一件事情是,我们
评论0