Direct2D

From Wikipedia, the free encyclopedia
Jump to: navigation, search

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

Direct2D offers high quality and fast performance while maintaining interoperability with GDI/GDI+ APIs and Direct3D/DirectDraw APIs.[2] It can take advantage of hardware acceleration through compatible graphics cards.

Direct2D 1.1 was launched with Windows 8. It was also backported to Windows 7 SP1 (but not to Windows Vista) via the Windows 7 platform update.[3][4][5] The original version of Direct2D was tied to DirectX 10, whereas Direct2D 1.1 integrates with DirectX 11.1.[3] Windows 8 also added interoperability between XAML and Direct2D (and even Direct3D) components, which can be all mixed in an application.[6] New features were added to Direct2D in Windows 8.1, most notably geometry realizations; this latter version of Direct2D is tied to Direct X 11.2.[7]

Overview

Direct2D is a native code API based on C++ that can be called by managed code and uses a "lightweight COM" approach 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 utilise hardware rendering on a graphics card that supports Direct3D 10.1 and/or Direct3D 10 Level 9 with WDDM 1.1 drivers, falling back to software rendering using WARP10 in situations when hardware is not available, such as session 0, and for remote server-side rendering. Direct2D performance and memory usage scale linearly with primitive counts in both software and hardware.

Direct2D supports high-quality rendering with the following features:

  • ClearType text rendering (provided by DirectWrite)
  • Per primitive antialiasing
  • Draw and fill commands for geometries (lines, curves) and bitmaps
  • Solid color, linear, radial, and bitmap brushes.
  • Rendering to intermediate layers
  • Rich geometry operations (e.g. unions, intersections, widening, outlining, etc.)

Direct2D allows interoperability with GDI, GDI+, and Direct3D and permits rendering to and from a Direct3D surface, as well as to and from a GDI/GDI+ device context (HDC) with full serialization of surfaces and device contexts, which enables it to work with other native Windows technologies such as DirectWrite, Windows Imaging Component, etc. Such interoperability allows developers to gradually replace critical code paths with Direct2D code without the need to overhaul their entire source code.

Direct2D uses a device-independent coordinate system, which allows automatic GUI scaling for different DPI settings that depend on various display resolutions and monitor sizes.

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."[8]

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."[9] 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."[9] 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."[9]

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.[10] In response to customer demands, an Nvidia support staffer posted that TIR cannot be simply implemented at the driver level, but requires new hardware.[11]

Uses and performance

Internet Explorer 9 and later versions use Direct2D and DirectWrite for improved performance and visual quality.[12][13][14] Direct2D support was added in the alpha version of Firefox 3.7, roughly doubling its rendering speed.[15] (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.[16] Google Chrome uses its own 2D library called Skia, which in turn renders through ANGLE on Windows.[17])

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

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

See also

References

  1. ^ "Updated Direct2D in March DirectX SDK - Tom's Blog - Site Home - TechNet Blogs". blogs.technet.com. 2009-03-24. Retrieved 2011-12-26. 
  2. ^ "Direct2D". MSDN. Retrieved 2011-12-26. 
  3. ^ a b "Windows with C++ - Introducing Direct2D 1.1". Msdn.microsoft.com. 2014-05-02. Retrieved 2014-08-09. 
  4. ^ "Platform Update for Windows 7 (Windows)". Msdn.microsoft.com. Retrieved 2014-08-09. 
  5. ^ Pooya Eimandar (2013). DirectX 11.1 Game Programming. Packt Publishing Ltd. p. 45. ISBN 978-1-84969-481-0. 
  6. ^ http://blogs.msdn.com/b/windowsappdev/archive/2012/03/15/combining-xaml-and-directx.aspx
  7. ^ http://msdn.microsoft.com/en-us/library/windows/desktop/dn363632(v=vs.85).aspx
  8. ^ Kilgard, Mark J. (2012). "GPU-accelerated path rendering". ACM Transactions on Graphics 31 (6): 1. doi:10.1145/2366145.2366191.  edit
  9. ^ a b c 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
  10. ^ "War of Words Between NVIDIA and AMD Over DirectX 11.1 Support Continues". Hardware Canucks. 2012-12-17. Retrieved 2014-08-09. 
  11. ^ https://forums.geforce.com/default/topic/511499/geforce-drivers/give-us-dx11-1-driver-support-on-dx11-cards-no-new-hardware-is-required-for-dx11-1/post/3642626/#3642626
  12. ^ By 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. 
  13. ^ Shankland, Stephen (2014-03-25). "Firefox 4 beta 4 adds hardware acceleration". CNET. Retrieved 2014-08-06. 
  14. ^ Mozilla chucks Roc at Microsoft's new hardness • The Register
  15. ^ Published on 27th November 2009 by Gareth Halfacree (2009-11-27). "Firefox 3.7 gets Direct2D support". bit-tech.net. Retrieved 2014-08-09. 
  16. ^ "Graphic bits » Blog Archive » DirectWrite Text Rendering in Firefox 6". Blog.mozilla.org. 2011-08-11. Retrieved 2014-08-09. 
  17. ^ "GPU Accelerated Compositing in Chrome - The Chromium Projects". Sites.google.com. Retrieved 2014-08-06. 
  18. ^ Bright, Peter (2012-07-24). "Windows 8 GPU acceleration: good news for Metro". Ars Technica. Retrieved 2014-08-09. 
  19. ^ "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. 

External links