使用 DirectX 实现高保真图形
Windows 应用程序开发人员长期以来一直使用 Microsoft DirectX 来提供高质量的硬件加速 3D 图形。 当该技术于 1995 年推出时,开发人员可以为愿意为 3D 图形板支付额外费用的游戏玩家和专业人士提供高质量的 3D 图形和工程应用。 现在,即使是最廉价的电脑也包括支持 3D 图形的硬件。
为了利用这些图形功能,Windows Vista 引入了适用于 DirectX 的 Windows 显示驱动程序模型 (WDDM) 基础结构,使多个应用程序和服务能够共享图形处理单元的资源 (GPU) 。 桌面窗口管理器 (DWM) 使用此技术在 3D 中对任务切换进行动画处理,提供应用程序窗口的动态缩略图,并为桌面应用程序提供 Windows Aero 玻璃效果。
Windows 7 将更多图形功能交由应用程序开发人员使用。 通过一组新的 DirectXAPI,Microsoft Win32 开发人员可以利用 GPU 中的最新创新,向其应用程序添加快速、可缩放、高质量的 2D 和 3D 图形、文本和图像。 在最新的 LCD 显示器上,DirectXAPIs 可以使用每个颜色分量大于 8 位的颜色深度来显示桌面和窗口内容。
借助 DirectX,Win32 开发人员还可以使用 GPU 的并行度进行常规用途计算(如图像处理),并且可以呈现到 DirectX 10 硬件、DirectX 9 硬件、CPU 或远程 Windows 计算机。 这些技术旨在与 Windows 图形设备接口 (GDI) 和 Windows GDI+ 进行互操作,确保开发人员可以轻松地保留其在 Win32 代码中的现有投资。 (查看 2009 年 3 月 DirectX SDK.) 中的新增功能
以下基于 COM 的 API 提供了这些增强的图形功能:
- 用于绘制 2D 图形的 Direct2D。
- 用于排列和呈现文本的DirectWrite。
- 用于处理和显示图像的 Windows 图像处理组件。
- 用于绘制 3D 图形的 Direct3D 10 。
- Direct3D 11 用于绘制 3D 图形,并提供对下一代 GPU 技术(例如细化、对纹理流式处理和常规用途计算的有限支持)的访问权限。
- DirectX 图形基础结构 (DXGI) ,用于管理本地和远程显示设备和 GPU 资源,并提供 DirectX 与 GDI 之间的互操作性。
Direct2D
Direct2D 基于 Microsoft Direct3D 10 构建,为 Win32 开发人员提供即时模式、与分辨率无关的 2D API,这些 API 使用下一代图形硬件的强大功能,但可与当今的 GDI/GDI+ 应用程序和 Direct3D 10 应用程序很好地互操作。 Direct2D 提供高质量的 2D 渲染,其性能优于 GDI 和 GDI+。 它使 Win32 开发人员可以更好地控制资源及其管理。 (请参阅 Direct2D.)
DirectWrite
当今的许多应用程序需要支持高质量的文本呈现、与分辨率无关的大纲字体,以及完整的 Unicode 文本和布局支持。 DirectWrite(一个新的 DirectX 组件)提供这些功能和其他功能:
- 一种独立于设备的文本布局系统,可提高文档和 UI 中的文本可读性。
- 可使用 GDI、Direct2D 或特定于应用程序的渲染技术的高质量子像素 ClearType 文本呈现。
- 与 Direct2D 一起使用时的硬件加速文本。
- 支持多格式文本。
- 支持 OpenType 字体的高级版式功能。
- 支持所有受支持语言的文本布局和呈现。
- GDI 兼容的布局和呈现。
DirectWrite字体系统支持“任意位置的任何字体”字体使用,用户无需执行单独的安装步骤,只需使用字体,并改进字体分组的结构层次结构,以帮助手动或编程的字体发现。 API 支持对多格式文本进行测量、绘制和命中测试。 DirectWrite在 Windows 7 中的关键语言基础结构的基础上,处理全球和本地化应用程序的所有受支持语言的文本。 DirectWrite还为想要执行自己的布局和 Unicode 到字形处理的开发人员提供低级别字形呈现 API。 (请参阅 DirectWrite.)
Windows 图像处理组件
在 Windows Vista 中, Windows 图像处理组件 引入了一个可扩展的框架,用于处理图像和图像元数据。 Windows 图像处理组件支持的图像格式包括 JPEG、 PNG 和 TIFF,支持的元数据格式包括 XMP 和 EXIF。 在 Windows 7 中,Windows 图像处理组件通过提供对渐进式图像解码、扩展 的 PNG 功能、 GIF 元数据和跨 APPn 段的元数据的支持,扩大了其标准合规性。 (请参阅 Windows 7.) 中 WIC 的新增功能
Direct3D 11
Microsoft Direct3D 11 扩展了 Direct3D 10 管道的功能,并为 Windows 7 游戏和高端 3D 应用程序提供对即将推出的一代 GPU 和多核 CPU 的高效、可靠、可缩放的访问。 除了 Direct3D 10 中的功能外,Direct3D 11 还引入了几个新功能。
现在可以细化几何图形和高阶图面,以支持修补和细分图面表示形式的可缩放动态内容。
为了充分利用多个 CPU 核心提供的并行处理能力,多线程处理通过将应用程序、运行时和驱动程序调用分布到多个核心来增加每个帧的潜在呈现调用数。 此外,资源创建和管理已针对多线程使用进行了优化,从而为流式处理提供了更高效的动态纹理管理。
已为 Direct3D 11 创建新的常规用途计算着色器。 与现有着色器不同,这些是可编程管道的扩展,使应用程序能够在独立于 CPU 的 GPU 上完全执行更多工作。 Direct3D 10 中引入的 DrawAuto 已扩展为与计算着色器交互。
对高级着色语言 (HLSL) 进行了一些改进,例如着色器中有限形式的动态链接以提高专用化复杂性,以及面向对象的编程构造(如类和接口)。 (查看 2009 年 3 月 DirectX SDK.) 中的新增功能
Direct3D 10 改进
Direct3D 10 包括重新设计的图形管道,其中包含可编程着色器阶段和不可变状态对象,用于初始化固定函数阶段。 状态对象通过最大程度地减少所需的状态更改次数来简化管道并提高性能。 着色器阶段的可编程性现在提供高级着色语言扩展,以支持无限制的着色器指令、通用着色器资源以及整数和按位计算。
管道还引入了几何着色器阶段,该阶段将工作完全从 CPU 卸载到 GPU。 通过此新阶段,可以创建几何图形,将数据流式传输到内存,并在没有 CPU 交互的情况下呈现几何图形。
其他几项改进专为提高性能而设计。 谓词呈现执行遮挡剔除以减少呈现的几何图形量。 实例化 API 可以通过绘制类似对象的多个实例来显著减少需要传输到 GPU 的几何图形量。 纹理阵列使 GPU 无需 CPU 干预即可进行纹理交换。
已对 Direct3D 10 和 Direct3D 11 进行了多次添加,以扩展这些 API 可以面向的配置范围。 Windows 高级光栅化平台 (WARP) 为 Direct3D 10 实现快速、多核可缩放的 CPU 渲染,从而在没有图形硬件的系统上实现全功能图形渲染。 添加新的“功能级别”(具体而言称为 Direct3D 10 级别 9)允许 Direct3D 10 和 Direct3D 11APIs 驱动 Microsoft Direct3D 9 类硬件,从而扩展了 Direct3D 10 或 Direct3D 11 应用程序可以面向市场上几乎所有计算机系统的配置数量。 (请参阅 Direct3D 10 Graphics.)
DirectX/GDI 互操作性
在 Windows Vista 中,使用 DirectX 和 GDI 呈现到共享图面的应用程序的行为会有所不同,具体取决于 DWM 是打开还是关闭。 此外,当 DWM 处于打开时,使用 DirectX 和 GDI 的应用程序在 Windows Vista 上的行为与在 Windows XP 上的行为不同。 这导致许多 ISV 在 Windows Vista 上运行其应用程序时禁用 DWM,以确保行为一致。 通过 Windows 7 中对 DirectX 的改进,应用程序现在可以自由地混合 DirectX 和 GDI,而无需禁用 DWM。 Windows 7 还利用更高效的 Direct3D 10 API,改进了需要 DirectX 和 GDI 之间互操作的方案的性能。 (请参阅 Direct2D 和 GDI 互操作概述。)