Direct2D

Last updated

Direct2D [1] is a 2D vector graphics application programming interface (API) designed by Microsoft and implemented in Windows 10, [2] Windows 8, Windows 7 and Windows Server 2008 R2, and also Windows Vista and Windows Server 2008 (with Platform Update installed). [3]

Contents

Direct2D takes advantage of hardware acceleration via the graphics processing unit (GPU) found in compatible graphics cards within personal computer, tablet, smartphone and modern graphical device. It offers high visual quality and fast rendering performance while maintaining full interoperability with classic Win32 graphics APIs such as GDI/GDI+ and modern graphics APIs such as Direct3D. [4]

Overview

Direct2D is a native code API based on C++ that can be called by managed code and uses a "lightweight COM" approach [5] just like Direct3D, with minimal amount of abstraction. However, unlike WPF and similarly to GDI/GDI+, Direct2D is an "immediate mode" rendering API with simple BeginDraw/Draw/EndDraw calls; Direct2D has no concept of a "scene" and does not use retained tree structures, and the rendering state is preserved between drawing calls.

Direct2D can minimize CPU usage and utilize hardware rendering on a graphics card with minimum support of Direct3D Feature Level 9 with WDDM 1.1 drivers. Applications can choose to use it exclusively with CPU, the so-called software rendering by using it in conjunction with WARP10 in situations when hardware capability is not available, such as when running within a device with minimal GPU support, under terminal service, Windows session 0, or when graphics rendering is performed in a remote server with the graphical result sent back to the client device. Direct2D performance and memory usage scale linearly with primitive counts in both software and hardware.

Direct2D [6] [7] supports high-quality rendering with the following key features:

Direct2D allows full interoperability with GDI, GDI+, and permits rendering to and from a Direct3D surface, as well as to and from a GDI/GDI+ device context (HDC). It can be used effectively together with Windows Imaging Component (WIC) for image encoding/decoding, and with DirectWrite for text formatting and font processing. Such interoperability allows developers to gradually replace critical code paths with Direct2D code without the need to overhaul their entire source code. In Windows 10 timeframe, an Open Source project called Win2D was developed by Microsoft to further simplify the usage of Direct2D and DirectWrite in Universal Windows Platform (UWP) application. Win2D is a highly-efficient WinRT wrapper of Direct2D and DirectWrite designed from the ground up to integrate seamlessly with XAML Canvas control while preserving the power of the underlying graphics subsystem.

Subsequent versions

Direct2D 1.1

An updated version of Direct2D was launched with Windows 8 in October 2012. [8] It was also backported to Windows 7 SP1 (but not to Windows Vista) via the Windows 7 platform update. [9] [10] [11] The original version of Direct2D was tied to DirectX 11 (in hardware, up to Direct3D 10.1 is used), whereas this version of Direct2D integrates with DirectX 11.1. [9] Windows 8 also added interoperability between XAML and Direct2D along with Direct3D components, which can be all mixed in an application. [12]

Direct2D 1.2

New features were added to Direct2D with Windows 8.1 in October 2013: [13] Geometry realizations, [14] Direct2D effects API, [15] [16] [17] command list API, multithreading APIs, per-device rendering priority, support for JPEG YCbCr images for smaller memory footprint, and support for block compressed formats (DDS files).

Direct2D 1.3

The release of Windows 10 in July 2015 brought important updates and new features to Direct2D such as the performance improvement of rendering scalable text without font rasterization, the ability to download the needed font from the cloud on demand without requiring the font installation step, an optimization for faster image loading and image effect rendering, and a more sophisticated way to apply gradient brush through the use of 2D mesh made of gradient patches. This release also introduced a brand-new API extension to support digital ink, which is highly leveraged by the Microsoft Edge browser as well as the ink canvas XAML control.

Implementation

In their 2012 paper on the competing NV path rendering OpenGL extension, Mark Kilgard and Jeff Bolz explain (and criticize) the internals of Direct2D as follows: "Direct2D operates by transforming paths on the CPU and then performing a constrained trapezoidal tessellation of each path. The result is a set of pixel-space trapezoids and additional shaded geometry to compute fractional coverage for the left and right edges of the trapezoids. These trapezoids and shaded geometry are then rasterized by the GPU. The resulting performance is generally better than entirely CPU-based approaches and requires no ancillary storage for multisample or stencil state; Direct2D renders directly into an aliased framebuffer with properly antialiased results. Direct2D’s primary disadvantage is [that] the ultimate performance is determined not by the GPU (doing fairly trivial rasterization) but rather by the CPU performing the transformation and trapezoidal tessellation of each path and Direct3D validation work." [18]

In July 2012, the Windows 8 team posted the following on the blog of Steven Sinofsky: "To improve geometry rendering performance in Windows 8, we focused on reducing the CPU cost associated with tessellation in two ways. First, we optimized our implementation of tessellation when rendering simple geometries like rectangles, lines, rounded rectangles, and ellipses." [19] These common-case optimizations claimed to improve performance in the range of 184% to 438%, depending on the primitive. The post continued: "Second, to improve performance when rendering irregular geometry (e.g. geographical borders on a map), we use a new graphics hardware feature called Target Independent Rasterization , or TIR. TIR enables Direct2D to spend fewer CPU cycles on tessellation, so it can give drawing instructions to the GPU more quickly and efficiently, without sacrificing visual quality. TIR is available in new GPU hardware designed for Windows 8 that supports DirectX 11.1." [19] This was followed by a benchmark using some 15 SVGs, claiming performance improvements in the range of 151% to 523%. The section concluded: "We worked closely with our graphics hardware partners to design TIR. Dramatic improvements were made possible because of that partnership. DirectX 11.1 hardware is already on the market today and we’re working with our partners to make sure more TIR-capable products will be broadly available." [19]

The TIR feature was among those that caused a "war of words" between Nvidia and AMD around December 2012, because Nvidia's Kepler GPU family does not support it, whereas AMD's GCN does. [20] In response to customer demands, an Nvidia support staffer posted that TIR cannot be simply implemented at the driver level, but requires new hardware; [21] [22] the Maxwell 2 architecture, introduced in September 2014, is such hardware. [23]

In Windows 8.1, Direct2D can use the Direct3D11 hardware tesselators, but only in conjunction with D2D1_FILL_MODE_ALTERNATE. If another fill mode is used (e.g. D2D1_FILL_MODE_WINDING) then Direct2D falls back to tessellation on the CPU, but still uses TIR for anti-aliasing (if TIR is available). Since hardware tessellation is available in base Direct3D11 (not necessarily 11.1), Microsoft claimed significant performance improvements with Direct2D in Windows 8.1 (vs. Windows 8) on non-TIR hardware. [24]

Uses and performance

Internet Explorer 9 and later versions use Direct2D and DirectWrite for improved performance and visual quality. [25] [26] [27] Direct2D support was added in the alpha version of Firefox 3.7, roughly doubling its rendering speed. [28] (Firefox 4 also added DirectWrite support, but this was made non-default for some fonts in Firefox 7 due to user complaints about the rendering quality. [29] Google Chrome uses its own 2D library called Skia, which in turn renders through ANGLE on Windows. [30] ) In Firefox 70.0, on old hardware, Direct2D is disabled on blacklisted old graphics drivers if they lack features and area is blacked out e.g. in Google Maps. [31]

Ars Technica's Peter Bright noted in the summer of 2012 that "most desktop applications don't use Direct2D." [32]

Microsoft Office 2013 supports either Direct2D+DirectWrite or GDI+Uniscribe for display rendering and typography. [33]

See also

Related Research Articles

ClearType is Microsoft's implementation of subpixel rendering technology in rendering text in a font system. ClearType attempts to improve the appearance of text on certain types of computer display screens by sacrificing color fidelity for additional intensity variation. This trade-off is asserted to work well on LCD flat panel monitors.

<span class="mw-page-title-main">DirectX</span> Collection of multimedia related APIs on Microsoft platforms

Microsoft DirectX is a collection of application programming interfaces (APIs) for handling tasks related to multimedia, especially game programming and video, on Microsoft platforms. Originally, the names of these APIs all began with "Direct", such as Direct3D, DirectDraw, DirectMusic, DirectPlay, DirectSound, and so forth. The name DirectX was coined as a shorthand term for all of these APIs and soon became the name of the collection. When Microsoft later set out to develop a gaming console, the X was used as the basis of the name Xbox to indicate that the console was based on DirectX technology. The X initial has been carried forward in the naming of APIs designed for the Xbox such as XInput and the Cross-platform Audio Creation Tool (XACT), while the DirectX pattern has been continued for Windows APIs such as Direct2D and DirectWrite.

DirectDraw (ddraw.dll) is an API that used to be a part of Microsoft's DirectX API. DirectDraw is used to accelerate rendering of 2D graphics in applications. DirectDraw also allows applications to run fullscreen or embedded in a window such as most other MS Windows applications. DirectDraw uses hardware acceleration if it is available on the client's computer. DirectDraw allows direct access to video memory, hardware overlays, hardware blitters, and page flipping. Its video memory manager can manipulate video memory with ease, taking full advantage of the blitting and color decompression capabilities of different types of display adapters.

Direct3D is a graphics application programming interface (API) for Microsoft Windows. Part of DirectX, Direct3D is used to render three-dimensional graphics in applications where performance is important, such as games. Direct3D uses hardware acceleration if it is available on the graphics card, allowing for hardware acceleration of the entire 3D rendering pipeline or even only partial acceleration. Direct3D exposes the advanced graphics capabilities of 3D graphics hardware, including Z-buffering, W-buffering, stencil buffering, spatial anti-aliasing, alpha blending, color blending, mipmapping, texture blending, clipping, culling, atmospheric effects, perspective-correct texture mapping, programmable HLSL shaders and effects. Integration with other DirectX technologies enables Direct3D to deliver such features as video mapping, hardware 3D rendering in 2D overlay planes, and even sprites, providing the use of 2D and 3D graphics in interactive media ties.

<span class="mw-page-title-main">Graphics Device Interface</span> Microsoft Windows API

The Graphics Device Interface (GDI) is a legacy component of Microsoft Windows responsible for representing graphical objects and transmitting them to output devices such as monitors and printers. It was superseded by Direct2D API. Windows apps use Windows API to interact with GDI, for such tasks as drawing lines and curves, rendering fonts, and handling palettes. The Windows USER subsystem uses GDI to render such UI elements as window frames and menus. Other systems have components that are similar to GDI; for example: macOS has Quartz, and Linux and Unix have X Window System.

<span class="mw-page-title-main">Graphics processing unit</span> Specialized electronic circuit; graphics accelerator

A graphics processing unit (GPU) is a specialized electronic circuit initially designed to accelerate computer graphics and image processing. After their initial design, GPUs were found to be useful for non-graphic calculations involving embarrassingly parallel problems due to their parallel structure. Other non-graphical uses include the training of neural networks and cryptocurrency mining.

Direct3D and OpenGL are competing application programming interfaces (APIs) which can be used in applications to render 2D and 3D computer graphics. As of 2005, graphics processing units (GPUs) almost always implement one version of both of these APIs. Examples include: DirectX 9 and OpenGL 2 circa 2004; DirectX 10 and OpenGL 3 circa 2008; and most recently, DirectX 11 and OpenGL 4 circa 2011. GPUs that support more recent versions of the standards are backwards compatible with applications that use the older standards; for example, one can run older DirectX 9 games on a more recent DirectX 11-certified GPU.

<span class="mw-page-title-main">Shader</span> Type of program in a graphical processing unit (GPU)

In computer graphics, a shader is a computer program that calculates the appropriate levels of light, darkness, and color during the rendering of a 3D scene—a process known as shading. Shaders have evolved to perform a variety of specialized functions in computer graphics special effects and video post-processing, as well as general-purpose computing on graphics processing units.

Windows Presentation Foundation (WPF) is a free and open-source graphical subsystem originally developed by Microsoft for rendering user interfaces in Windows-based applications. WPF, previously known as "Avalon", was initially released as part of .NET Framework 3.0 in 2006. WPF uses DirectX and attempts to provide a consistent programming model for building applications. It separates the user interface from business logic, and resembles similar XML-oriented object models, such as those implemented in XUL and SVG.

Desktop Window Manager is the compositing window manager in Microsoft Windows since Windows Vista that enables the use of hardware acceleration to render the graphical user interface of Windows.

Windows Display Driver Model (WDDM) is the graphic driver architecture for video card drivers running Microsoft Windows versions beginning with Windows Vista.

Tiled rendering is the process of subdividing a computer graphics image by a regular grid in optical space and rendering each section of the grid, or tile, separately. The advantage to this design is that the amount of memory and bandwidth is reduced compared to immediate mode rendering systems that draw the entire frame at once. This has made tile rendering systems particularly common for low-power handheld device use. Tiled rendering is sometimes known as a "sort middle" architecture, because it performs the sorting of the geometry in the middle of the graphics pipeline instead of near the end.

Adreno is a series of graphics processing unit (GPU) semiconductor intellectual property cores developed by Qualcomm and used in many of their SoCs.

Windows Advanced Rasterization Platform (WARP) is a software rasterizer and a component of DirectX graphics runtime in Windows 7 and later. It is available for Windows Vista and Windows Server 2008 through platform update for Windows Vista.

DirectWrite is a text layout and glyph rendering API by Microsoft. It was designed to replace GDI/GDI+ and Uniscribe for screen-oriented rendering and was first shipped with Windows 7 and Windows Server 2008 R2, as well as Windows Vista and Windows Server 2008. DirectWrite is hardware-accelerated when running on top of Direct2D, but can also use the CPU to render on any target, including a GDI bitmap.

<span class="mw-page-title-main">Kepler (microarchitecture)</span> GPU microarchitecture by Nvidia

Kepler is the codename for a GPU microarchitecture developed by Nvidia, first introduced at retail in April 2012, as the successor to the Fermi microarchitecture. Kepler was Nvidia's first microarchitecture to focus on energy efficiency. Most GeForce 600 series, most GeForce 700 series, and some GeForce 800M series GPUs were based on Kepler, all manufactured in 28 nm. Kepler also found use in the GK20A, the GPU component of the Tegra K1 SoC, as well as in the Quadro Kxxx series, the Quadro NVS 510, and Nvidia Tesla computing modules. Kepler was followed by the Maxwell microarchitecture and used alongside Maxwell in the GeForce 700 series and GeForce 800M series.

ANGLE is an open source, cross-platform graphics engine abstraction layer developed by Google. ANGLE translates OpenGL ES 2/3 calls to DirectX 9, 11, OpenGL or Vulkan API calls. It's a portable version of OpenGL but with limitations of OpenGL ES standard.

Feature levels in Direct3D define strict sets of features required by certain versions of the Direct3D API and runtime, as well as additional optional feature levels available within the same API version.

DirectX Raytracing (DXR) is a feature introduced in Microsoft's DirectX 12 that implements ray tracing, for video graphic rendering. DXR was released with the Windows 10 October update on October 10, 2018. It requires an AMD Radeon RX 6000 series, AMD Radeon RX 7000 series or Nvidia GeForce 10, 20,30, or 40 series video card, which is designed to handle the high computing load used for ray tracing.

<span class="mw-page-title-main">Cg (programming language)</span> Shading language

Cg and High-Level Shader Language (HLSL) are two names given to a high-level shading language developed by Nvidia and Microsoft for programming shaders. Cg/HLSL is based on the C programming language and although they share the same core syntax, some features of C were modified and new data types were added to make Cg/HLSL more suitable for programming graphics processing units.

References

  1. "Direct2D - Win32 apps".
  2. "What's New in Direct2D and DirectWrite for Windows 10 (Channel 9)". Channel 9. Retrieved 2015-12-03.
  3. "Updated Direct2D in March DirectX SDK - Tom's Blog - Site Home - TechNet Blogs". blogs.technet.com. 2009-03-24. Archived from the original on 2009-03-28. Retrieved 2011-12-26.
  4. "Direct2D". MSDN . Retrieved 2011-12-26.
  5. ".net - What exactly is "lightweight COM"?". Stack Overflow.
  6. "Text Rendering with Direct2D and DirectWrite - Win32 apps".
  7. "Supported Pixel Formats and Alpha Modes - Win32 apps".
  8. "DirectX feature improvements in Windows 8 - Windows drivers".
  9. 1 2 "Windows with C++ - Introducing Direct2D 1.1". Msdn.microsoft.com. 2014-05-02. Retrieved 2014-08-09.
  10. "Platform Update for Windows 7 (Windows)". Msdn.microsoft.com. Retrieved 2014-08-09.
  11. Pooya Eimandar (2013). DirectX 11.1 Game Programming. Packt Publishing Ltd. p. 45. ISBN   978-1-84969-481-0.
  12. "DevBlogs".
  13. "What's new in Direct2D - Win32 apps".
  14. "Geometry Realizations Overview - Win32 apps".
  15. "Effects (Direct2D) - Win32 apps".
  16. "Built-in Effects - Win32 apps".
  17. "How to Apply Effects to Primitives - Win32 apps".
  18. Kilgard, Mark J. (2012). "GPU-accelerated path rendering". ACM Transactions on Graphics. 31 (6): 1–10. doi:10.1145/2366145.2366191. S2CID   12967014.
  19. 1 2 3 Rob Copeland, with contributions from Sriram Subramanian, Dan McLachlan, Kam VedBrat, Steve Lim, and Jianye Lu, and introduction by Steven Sinofsky Hardware accelerating everything: Windows 8 graphics
  20. "War of Words Between NVIDIA and AMD Over DirectX 11.1 Support Continues". Hardware Canucks. 2012-12-17. Retrieved 2014-08-09.
  21. "Give us DX11.1 driver support on DX11 cards. no new hardware is required for dx11.1". NVIDIA.
  22. "Fermi and Kepler DirectX API Support | NVIDIA". nvidia.custhelp.com.
  23. Smith, Ryan. "The NVIDIA GeForce GTX 980 Review: Maxwell Mark 2". www.anandtech.com.
  24. http://channel9.msdn.com/Events/Build/2013/3-191 19:00 to 20:00 and 55:00 to 56:30
  25. tim, on August 11th, 2010 Follow tim on Twitter (2010-08-11). "Firefox 4 as Psychedelic as IE9 with Direct2D enabled « Tim Anderson's ITWriting". Itwriting.com. Retrieved 2014-08-06.{{cite web}}: |author= has generic name (help)CS1 maint: multiple names: authors list (link)
  26. Shankland, Stephen (2014-03-25). "Firefox 4 beta 4 adds hardware acceleration". CNET. Retrieved 2014-08-06.
  27. "Mozilla chucks Roc at Microsoft's new hardness • The Register". www.theregister.com.
  28. Published on 27th November 2009 by Gareth Halfacree (2009-11-27). "Firefox 3.7 gets Direct2D support". bit-tech.net. Retrieved 2014-08-09.
  29. "Graphic bits » Blog Archive » DirectWrite Text Rendering in Firefox 6". Blog.mozilla.org. 2011-08-11. Archived from the original on 2014-08-10. Retrieved 2014-08-09.
  30. "GPU Accelerated Compositing in Chrome - The Chromium Projects" . Retrieved 2014-08-06.
  31. Buckler, Craig (2011-12-20). "How to Enable WebGL for Blocked Graphics Cards in Firefox" . Retrieved 2019-10-21.
  32. Bright, Peter (2012-07-24). "Windows 8 GPU acceleration: good news for Metro". Ars Technica. Retrieved 2014-08-09.
  33. "Office Adopts New Windows Display Technology - Murray Sargent: Math in Office - Site Home - MSDN Blogs". Blogs.msdn.com. 2012-07-29. Retrieved 2014-08-09.