关于 Direct2D

http://msdn.microsoft.com/zh-cn/library/windows/desktop/dd370987(v=vs.85).aspx

本主题介绍 Direct2D,这是 Windows 7 的全新二维图形 API。使用 Direct2D,Win32 开发人员可在执行二维图形呈现任务时获得出色的性能和视觉效果。

什么是 Direct2D?

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

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

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

为什么使用 Direct2D?

在 Microsoft Windows 中开发出新二维图形 API 的主要目的包括:

  • 紧跟 Windows 用户所习惯的不断提高的丰富视觉体验。
  • 使开发人员能够编写出可随着运行代码的 PC 的图形处理硬件直接扩展的二维呈现代码。
  • 使开发人员能够编写出可在服务上下文中运行的二维图形呈现代码。

近年来,最终用户开始希望数字体验具备更好的视觉保真度。这种趋势在消费电子产品中得到反映。GPS 设备、媒体播放设备、移动电话和数码相机年复一年地不断实现更加丰富的体验。电影、电视、视频游戏和网站中各种各样的图形内容也反映了这种趋势。为了跟上这些变化,开发人员需要不断丰富现有 Windows 应用程序的视觉效果。

视频游戏图形和各种 Windows 体验(如 Windows Media Center 和 Aero)的发展,推动现代 Windows PC 中的图形处理器也得到了稳定的发展。有些 Windows 应用程序可以通过 Microsoft Direct3D 和 Windows Presentation Foundation (WPF) 来利用现代 GPU。尽管 Direct3D 可用于开发高端三维图形应用程序,WPF 可满足 .NET 开发人员的需要,但对于拥有基于 GDI 和 GDI+ 的呈现代码所构成的大型现有代码库的开发人员或要在其基于 Direct3D 的应用程序中加入高质量二维图形的开发人员而言,仍无法满足其要求。

最后,对于进行企业方案和网站开发方案的开发人员而言,需要可在服务中使用的图形 API。现有的呈现 API 侧重于单个用户会话中的客户端呈现。在服务上下文中使用时,它们无法满足稳定性和可伸缩性的要求。因此,需要新的 API 来解决这些问题。

高性能和最大可用性

Direct2D 是使用 Direct3D 10.1 API 构建的用户模式库。这意味着 Direct2D 应用程序可受益于现代主流 GPU 的硬件加速呈现。在更早的 Direct3D 9 硬件中,也可通过使用 Direct3D 10-level-9 呈现来实现硬件加速。此组合可在现有 Windows PC 的图形硬件上实现卓越的性能。

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

对于无法使用硬件加速的情况,Direct2D 提供了高性能软件光栅器。在软件中呈现时,与使用 GDI+ 并提供同等视觉质量的应用程序相比,使用 Direct2D 的应用程序可大幅提高呈现性能。该软件光栅器还可用在服务上下文中。

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

Direct2D 提供单个 API,该 API 既具有 Direct3D 的性能,又可通过软件回退、远程桌面和服务呈现等实现高可用性,使开发人员进行单一实现就可在很多不同方案中进行高性能呈现。

视觉质量

与使用 GDI 的应用程序相比,使用 Direct2D 处理图形的应用程序可实现更高的视觉质量。Direct2D 使用每基元抗锯齿功能,在呈现的内容中实现外观更为平滑的曲线和直线。在呈现二维基元时,也完全支持透明度和 Alpha 混合。下图对使用 GDI 呈现的锯齿内容(左)和 Direct2D 呈现的抗锯齿内容(右)进行了比较。

在需要的情况下,开发人员可以指定矢量图形的锯齿呈现。这些情况包括需要与硬像素边界(如指针或标尺等 UI 元素)对齐、必须匹配输出的 GDI 样式或者将在呈现过程的下游通过多重采样抗锯齿或其他一些机制执行抗锯齿。

互操作性

通过 GDI 与 Direct3D 的图面级互操作性,开发人员可以更方便地集成基于 Direct2D 的呈现。主要通过 GDI、GDI+ 或 Direct3D 呈现内容的应用程序可以先使用 Direct2D 呈现其应用程序的特定区域,经过一段时间再改用这样一种模型,即 Direct2D 主要用于执行呈现,GDI 主要用于插件或传统可扩展性。

通过 Direct2D,还可以方便地使用 DirectWrite 这一新的文本 API 以及 Microsoft Windows 图像处理组件 (WIC)(可能为英文网页)的高级图像处理功能。

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

小结

使用 Microsoft Direct2D,开发人员可在应用程序中构建二维图形功能,从而实现优于 GDI 的视觉质量和可随现代 GPU 扩展的性能特征。通过 Direct2D 互操作性模型,开发人员可以在进行基于 GDI、GDI+ 或 Direct3D 的呈现时有选择地迁移部分应用程序。

另请参见

Direct2D 入门
Direct2D API 概述
时间: 2024-10-02 22:34:54

关于 Direct2D的相关文章

在 WinForm 中使用 Direct2D

在 C# 的 WinForm 应用中,界面的绘制使用的是 GDI+.不过在一些特别的应用中,可能需要用硬件加速来提高绘制的效率.下面就来介绍两种在 WinForm 应用中嵌入 Direct2D 的方法. 这里所谓的“嵌入”,指的是只有窗口的某一部分应用 Direct2D 绘制(用一些控件承载),而不是整个窗口都使用 Direct2D 绘制.这是一种混合方案,需要用硬件加速的部分由自己来绘制,其它部分仍然可以使用现有的 WinForm 技术. 至于 Direct2D 的类库,我仍然使用 Sharp

Direct2D 学习笔记

Direct2D 概览 Direct2D(以下简称D2D)是一个 用户模式的库,基于 D3D 10.1 API(从 Win8开始,D2D 基于 D3D 11.1).所以 D2D 可以提供 GPU 硬件加速.D2D架构图: 先绘制个矩阵 第一步:头文件 #include <d2d1.h> 第二步:创建一个 ID2D1 工厂 1 ID2D1Factory *m_pD2DFactory ; 2 hr = D2D1CreateFactory (D2D1_FACTORY_TYPE_SINGLE_THRE

使用Direct2D实现一个简单第一人称引擎

这篇文章是对"a first person engine in 265 lines"[1]的一个Direct2D版的移植.看到这篇文章我立刻就想到了QUAKE,当然QUAKE使用了比这个更高效的技术.但是这个技术无疑更简单,更娱乐,同时也算是一种RayCast原理的使用.于是就想到用Direct2D做一个看看. 由于对Html5不熟,同时参考了Fredrik Wallgren[2]. 同时也参考了MS提供的Direct2D事例[3]. 代码托管:https://d2dfpsengine

Direct2D教程(三)简单几何图形

从本章开始,我们介绍D2D几何图形. D2D图形分类 Direct2D支持多种类型的几何图形,包括Simple Geometry(简单几何图形) 矩形 圆角矩形 椭圆 Path Geometry(路径图形)Composite Geometry(复合图形) Geometry Group(图形组) Transformed Geometry(变换的图形) 各种图形对应的D2D接口如下,所有接口都继承自ID2D1Geometry. 矩形-ID2D1RectangleGeometry 圆角矩形-ID2D1

Direct2D教程(九)渲染位图

概述 这篇的标题更确切的说应该叫位图画刷,这样才好和前几篇对应起来.在Direct2D中,位图的渲染也是通过画刷来实现的. Direct2D中并没有直接操作位图的接口,而是借助WIC(Windows Image Component)来完成的.今天我们来看看如何在Direct2D中加载并显示位图.这个方法可以用来渲染背景.基本步骤如下. 从文件创建WIC位图 由WIC位图创建D2D位图 使用D2D绘制位图 在开始之前,首先简要介绍一下WIC 什么是WIC? WIC全称是Windows Image

Direct2D教程(一)Direct2D已经来了,谁是GDI的终结者?

什么是Direct2D 一言以蔽之,就是Windows 7平台上的一个2D图形API,可以提供高性能,高质量的2D渲染.大多数人对Direct2D可能都比较陌生,以至于我之前在论坛上提到这个词的时候,有人竟然说你是不是写错了?可能大家比较熟悉的是Direct3D,因为D3D已经是当前游戏界的主流应用.在过去,3D世界是OpenGL与DirectX二分天下,但是由于OpenGL发展十分滞后,而且没有一个像微软这样强大的后台支柱,所以逐渐被DirectX所超越.回过头来说2D,过去Windows上的

使用DirectWrite测量Direct2D文字大小

转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 最近在使用Direct2D和DirectWrite写引擎,在引擎中需要实现文本标签控件.但是文本标签的尺寸最好不是由我们人为指定的,要不然的话就会出现标签中文本溢出.空白存留等等问题,这样很影响美观.这就需要我们在文本标签的创建时根据文本的字体格式.文字排版等等因素来确定标签大小,而不是人为地指定大小,即实现标签大小的自适应功能(根据文本的内容.字体.格式等等因素得出的宽高来设置标签的大小). 然而,想要实现

在Unity中使用Direct2D

在Unity中可能需要在纹理上面绘制文字.图像等.比如游戏中的显示器,手机等等等等等.太多了. Unity的Textute2D类提供了设置像素的操作,但是这效率实在不敢恭维. 汉字数量巨大,全部贴在一张图上既耗空间,不方便改变字体样式. 使用FreeType2等CPU计算的文字库一帧又画不了多少,毕竟还要提交到显存 于是瞄准了Direct2D,当初学习这图像接口时就被微软说的"能与Direct3D进行完美交互"所吸引. 好在Unity支持DX11了,我们能够在Unity上面使用Dire

从GDI到Direct2D:基本准备

最近在做个游戏,因为不能用游戏引擎,所以一开始就选了MFC+GDI的组合,毕竟CImage类是相当好用的,结果发现游戏竟然在还没有加什么功能的时候就只能跑到30帧出头,我觉得有点悬,将来如果加上更多的功能的话,一旦卡到30帧以下就没法忍了.所以我去学了一下Direct2D,这个传说当中的GDI替代品. 网上现在Direct2D的资料不是很多,其中我感觉MSDN的几个样例比较适合新手入门,上面的例子都是Win32的,可能迁移到MFC有点障碍.这篇博客主要针对已经会用GDI做各种操作的人,使他们能够

将System.Drawing.Bitmap转换为Direct2D.D2DBitmap

最近在尝试Direct2D编程,挺好玩的. 但是有时候还是会用到GDI+来生成图片,但D2D绘图需要用到自己的D2DBitmap类. 因此需要转换,查阅了下网上的资料,写了这么一个方法: 1 using System; 2 using System.Windows.Forms; 3 using System.Linq; 4 using System.Text; 5 using System.Diagnostics; 6 using DX = SharpDX; 7 using D2D = Shar