关于 Direct2D

本主题介绍 Direct2D,这是一种 API,它为 Win32 开发人员提供以卓越的性能和视觉质量执行二维图形呈现任务的能力。

什么是 Direct2D?

Direct2D 是一种硬件加速的即时模式二维图形 API,可为 2D 几何图形、位图和文本提供高性能和高质量的渲染。 Direct2D API 旨在与使用 GDI、GDI+ 或 Direct3D 的现有代码进行互操作。

Direct2D 主要供以下类开发人员使用:

  • 大型企业级本机应用程序的开发人员。
  • 创建控件工具包和库供下游开发人员使用的开发人员。
  • 需要服务器端呈现二维图形的开发人员。
  • 使用 Direct3D 图形的开发人员需要简单、高性能的 2D 和文本呈现,用于菜单、用户界面 (UI) 元素,以及抬头显示 (HUD) 。

为什么选择 Direct2D?

在 Microsoft Windows 中创建新的 2-D 图形 API 的主要动机包括:

  • 跟上 Windows 用户习惯的视觉丰富度不断提升的步伐。
  • 使开发人员能够编写与运行它的电脑的图形处理硬件直接缩放的二维呈现代码。
  • 使开发人员能够编写代码来呈现可在服务上下文中运行的二维图形。

近年来,最终用户开始期待数字体验中更高的视觉保真度。 这种趋势反映在消费电子产品中。 GPS 设备、媒体播放设备、移动电话和数码相机年复一年地提供更丰富的体验。 这种趋势也体现在电影、电视、视频游戏和 Web 中图形内容的多样性中。 为了跟上这些更改的步伐,始终要求开发人员将其现有 Windows 应用程序提升到更丰富的视觉对象级别。

现代 Windows 电脑中的图形处理器也在稳步发展,这得益于视频游戏图形的进步以及 Windows Media Center 和 Aero 等 Windows 体验的一部分。 某些 Windows 应用程序可以通过使用 Microsoft Direct3D 和 Windows Presentation Foundation (WPF) 来利用新式 GPU。 虽然 Direct3D 为高端 3D 图形应用程序提供服务,WPF 可满足 .NET 开发人员的需求,但对于拥有基于 GDI 和 GDI+ 呈现代码的大量现有代码库或想要在其基于 Direct3D 的应用程序中合并高质量 2-D 图形的开发人员来说,存在差距。

最后,对可在服务中使用的图形 API 的需求已成为在企业和 Web 开发方案中工作的开发人员的新兴要求。 现有呈现 API 侧重于单个用户会话中的客户端呈现。 因此,在服务上下文中使用时,它们在可靠性和可伸缩性方面可能会存在不足。 需要一个新的 API 来解决此问题。

具有最大可用性的高性能

Direct2D 是使用 Direct3D 10.1 API 生成的用户模式库。 这意味着 Direct2D 应用程序受益于现代主流 GPU 上的硬件加速渲染。 硬件加速也是通过使用 Direct3D 10 级别 9 渲染在早期 Direct3D 9 硬件上实现的。 这种组合在现有 Windows 电脑上的图形硬件上提供出色的性能。

注意

从 Windows 8 开始,Direct2D 是使用 Direct3D 11.1 API 生成的。

 

下图显示了 Direct2D 的分层体系结构。

direct2d 分层体系结构示意图

对于无法使用硬件加速的情况,Direct2D 包括高性能软件光栅器。 在软件中呈现时,使用 Direct2D 的应用程序的呈现性能明显优于 GDI+ 和类似的视觉质量。 软件光栅器还设计用于服务上下文。

也可以使用 Windows 7 操作系统中的远程桌面协议 (RDP) 基础结构远程显示使用 Direct2D 呈现的内容。 开发人员可以选择呈现是由显示计算机上的 GPU 处理,还是在本地呈现并作为位图传输。 可以根据所需的填充率和呈现的图形基元的数量进行选择。 当显示计算机运行的操作系统早于 Windows 7 时,远程显示呈现是通过网络传输位图来执行的。

通过提供单个 API,通过提供软件回退、远程桌面和服务渲染来结合 Direct3D 的性能和高可用性,Direct2D 使开发人员能够在许多不同的方案中实现高性能呈现。

视觉质量

使用 Direct2D 进行图形的应用程序可以提供比使用 GDI 实现的更高的视觉质量。 Direct2D 使用按基元抗锯齿,在呈现的内容中提供更平滑的曲线和线条。 在呈现二维基元时,还完全支持透明度和 alpha 混合。 下图比较了在左侧) 使用 GDI (呈现的锯齿内容与右侧) 由 Direct2D (呈现的抗锯齿内容。

以 gdi 和 direct2d 呈现的曲线和线条图示

开发人员可以指定矢量图形的别名呈现。 这用于需要贴靠到硬像素边界的方案(例如指针或标尺等 UI 元素),如果输出的 GDI 样式必须匹配,或者如果在呈现过程中通过多重采样抗锯齿或其他某种机制在呈现过程中下游执行抗锯齿。

互操作性

通过与 GDI 和 Direct3D 的图面级互操作性,开发人员可以更轻松地集成基于 Direct2D 的渲染。 主要使用 GDI、GDI+ 或 Direct3D 呈现内容的应用程序可以从使用 Direct2D 开始呈现其应用程序的特定区域,并随着时间的推移移动到主要通过 Direct2D 执行呈现的模型,使用 GDI 主要用于插件或旧扩展性。

Direct2D 还便于使用DirectWrite获取高质量文本和 Microsoft Windows 图像处理组件 (WIC) 的高级图像处理功能。

有关 Direct2D 互操作性的详细信息,请参阅 Direct2D SDK 的互操作性部分。

总结

Microsoft Direct2D 使开发人员能够在其应用程序中生成二维图形功能,这些功能提供比 GDI 更高的视觉质量,以及使用新式 GPU 进行缩放的性能特征。 借助 Direct2D 互操作性模型,开发人员可以有选择地一次迁移其应用程序的某些部分以及基于 GDI、GDI+ 或 Direct3D 的呈现。

适用于 Windows 8 的 Direct2D 快速入门

请参阅 Direct2D API 概述