<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">DirectX Developer Blog</title><subtitle type="html" /><id>http://blogs.msdn.com/directx/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/directx/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/directx/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2009-08-26T12:15:00Z</updated><entry><title>Direct2D and DirectWrite</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/directx/archive/2009/12/18/direct2d-and-directwrite.aspx" /><id>http://blogs.msdn.com/directx/archive/2009/12/18/direct2d-and-directwrite.aspx</id><published>2009-12-18T02:04:00Z</published><updated>2009-12-18T02:04:00Z</updated><content type="html">&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;One of the more interesting aspects of Direct2D is that it cooperates with another API, DirectWrite in order to handle text. This is unlike other monolithic APIs, such as GDI, GDI+ or WPF. This post explores why these components are separated in this way, as well as differences and similarities between them.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;H1 style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;&lt;U&gt;&lt;FONT size=4 face=Calibri&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/H1&gt;
&lt;H1 style="MARGIN: 0in 0in 0pt"&gt;&lt;U&gt;&lt;FONT size=4&gt;&lt;FONT face=Calibri&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&amp;nbsp;&lt;/H1&gt;
&lt;H1 style="MARGIN: 0in 0in 0pt"&gt;&lt;U&gt;&lt;FONT size=4&gt;&lt;FONT face=Calibri&gt;Incremental Adoption&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/H1&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;One of the lessons learned by the DirectX team is that many applications cannot move completely over to a new graphics API in one release. This might be because they need to support plug-ins that still take the older interfaces, because the application itself is too large to port over to a new API in one release or because some part of the newer API is really desirable but the older API is working well enough for other parts of the application. Providing a separate component dedicated to text allows a component to adopt DirectWrite while still leaving their application GDI or GDI+ based. Having two distinct but highly interoperable APIs allows customers to only pay for the IO and working set of the APIs they use in their application.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H1 style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=4&gt;&lt;U&gt;&lt;FONT face=Calibri&gt;Text Services versus Rendering&lt;/FONT&gt;&lt;/U&gt;&lt;/FONT&gt;&lt;/H1&gt;
&lt;P style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=4&gt;&lt;U&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="TEXT-DECORATION: none; text-underline: none"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;&lt;U&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/H2&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;As applications have evolved, their text processing requirements have grown increasingly complex. Initially, text was generally confined to statically laid-out UI, and the text was rendered within a well-defined box, such as a button. As applications had to be shipped in more languages this approach became more difficult to sustain since both the width and height of the translated text can vary substantially between different languages. To adapt, applications started having to dynamically lay out their UI depending on the actual rendered size of the text, rather than the other way around.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;To help applications with this task, DirectWrite provides the &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;IDWriteTextLayout&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; interface. This API allows an application to specify a piece of text with complex characteristics such as: different fonts and font sizes, underlines, strikethroughs, bi-directional text, effects, ellipsis and even embedded non-glyph characters (such as a bitmap emoticon or an icon). The application can then change various characteristics of the text as it iteratively determines its UI layout. The layout can either position the glyphs ideally based on their widths (as WPF does), or, it can snap the glyphs to the nearest pixel positions (as GDI does). As well as obtaining text measurements, the application can hit test various parts of the text. For example, it might wish to know that a hyperlink in the text has been clicked on.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;The text layout interface is completely decoupled from the input technology and the rendering API the application chooses to use. As shown below:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;&lt;SPAN style="TEXT-DECORATION: none; mso-no-proof: yes; text-underline: none"&gt;&lt;?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /&gt;&lt;v:shapetype id=_x0000_t75 coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"&gt;&lt;/v:path&gt;&lt;o:lock v:ext="edit" aspectratio="t"&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape style="WIDTH: 468pt; HEIGHT: 200.25pt; VISIBILITY: visible" id=Object_x0020_2 type="#_x0000_t75" o:gfxdata="UEsDBBQABgAIAAAAIQC75UiUBQEAAB4CAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbKSRvU7DMBSF&amp;#13;&amp;#10;dyTewfKKEqcMCKEmHfgZgaE8wMW+SSwc27JvS/v23KTJgkoXFsu+P+c7Ol5vDoMTe0zZBl/LVVlJ&amp;#13;&amp;#10;gV4HY31Xy4/tS3EvRSbwBlzwWMsjZrlprq/W22PELHjb51r2RPFBqax7HCCXIaLnThvSAMTP1KkI&amp;#13;&amp;#10;+gs6VLdVdad08ISeCho1ZLN+whZ2jsTzgcsnJwldluLxNDiyagkxOquB2Knae/OLUsyEkjenmdzb&amp;#13;&amp;#10;mG/YhlRnCWPnb8C898bRJGtQvEOiVxjYhtLOxs8AySiT4JuDystlVV4WPeM6tK3VaILeDZxIOSsu&amp;#13;&amp;#10;ti/jidNGNZ3/J08yC1dNv9v8AAAA//8DAFBLAwQUAAYACAAAACEArTA/8cEAAAAyAQAACwAAAF9y&amp;#13;&amp;#10;ZWxzLy5yZWxzhI/NCsIwEITvgu8Q9m7TehCRpr2I4FX0AdZk2wbbJGTj39ubi6AgeJtl2G9m6vYx&amp;#13;&amp;#10;jeJGka13CqqiBEFOe2Ndr+B03C3WIDihMzh6RwqexNA281l9oBFTfuLBBhaZ4ljBkFLYSMl6oAm5&amp;#13;&amp;#10;8IFcdjofJ0z5jL0MqC/Yk1yW5UrGTwY0X0yxNwri3lQgjs+Qk/+zfddZTVuvrxO59CNCmoj3vCwj&amp;#13;&amp;#10;MfaUFOjRhrPHaN4Wv0VV5OYgm1p+LW1eAAAA//8DAFBLAwQUAAYACAAAACEAHUR4w0YLAADvewAA&amp;#13;&amp;#10;HwAAAGNsaXBib2FyZC9kcmF3aW5ncy9kcmF3aW5nMS54bWzsnVlv2zgQx98X2O9A6HXRxjp8BXWL&amp;#13;&amp;#10;Nm2KBdJuEKfoMyPRsba6lqIdp59+Z3hYlmtVSXooalkUiR2RFPkXJc9vhhw/e7FJE7JmvIzzbOa4&amp;#13;&amp;#10;TwcOYVmYR3F2PXM+XJ4+mTikFDSLaJJnbObcstJ58fzPP57R42tOi2UcEmghK4/pzFkKURwfHZXh&amp;#13;&amp;#10;kqW0fJoXLINji5ynVMBbfn0UcXoDLafJkTcYjI5SGmfO86qp11RQsuLxA5pK8vATi05otqYlNJmE&amp;#13;&amp;#10;x7t/0X1Mwm9vmR5n67e8mBfnHHsevl+fcxJHMweUy2gKEjlH+oAuBm+P9mpdVw1sFjzF8vliQTay&amp;#13;&amp;#10;lVv8KdtgG0FC+ONkMHDhv0NCOOYH3nQw0CXC5T+q3mgyHE+nDoEC3sSdBlWBNy2NQN9UH+DFTr/K&amp;#13;&amp;#10;AnuVrb8cKMwINdCLfJVFLCIXLIQZcp0wMt6OHauZgZsmSq3Z3pA9bzLCAWHf/UEAg90b/ghGA3/V&amp;#13;&amp;#10;w4eZo0e37Tk9Lngp3rI8Jfhi5nDsGXZLzi66PiuF6owpJy+J6Y/YzOVgxeZVHt3isK/gN1xWLpKT&amp;#13;&amp;#10;PJEXhWbhMuczJxRcjTEpxVzcJgyLR2xxrqYDvLqAignIMXNY9uTDHEtDR6siyTpxQQiSUn6mmk6u&amp;#13;&amp;#10;4dZLHAJlLunV/PPMmboBjhE7IIswepa94p/gBnWgbRFn+i0UWcKp4JY6X2UhDNyVA9a9KKElVwr3&amp;#13;&amp;#10;iXG8u0E6ebzMkzg6jZMEOy9vV3aScLKmcLbok6u7XCslz0rEbcEWNIRJ/leaPUmEkoLRvQOMqgNh&amp;#13;&amp;#10;uXcgLCs5QCepjNYDuwIvvUqaYDjGDhP62+uDomh9/EofM0msPiiK1ieo9HH9sQsPFjuB1gmqogUa&amp;#13;&amp;#10;7gg08Sby8WBnEKqiBRpVAm0/maxAqIoWaLwj0Djw7TNafnChKlqgSSUQqiM/ye0MQlW0QNMdgUbD&amp;#13;&amp;#10;sX1IyxmEqiiLaMe0lIYpyqUm0Nb8ZFl0TjndNzZJFHNhAALMTqgOPyvDdlWyeYGGsbJKjeVbGks2&amp;#13;&amp;#10;yS7YAnAGoMNz8GrtWYc0DFkmRtqKk6Wx1AJsyW1FZYPuVUyEMSt1WazGFgvoyraiNk4RHyt7tH7G&amp;#13;&amp;#10;bQ151jyrKqdxlvNDXa4M2oUqLyXRIwZxFOg0486oGXeG2sx9LynpEO6Qq5t3eQT2Ml2JXPZuH340&amp;#13;&amp;#10;rEn48QFzAs1Qhv0C10UkUvAzmXjToa/VNy0ZpmlmHxTrOtLURqN/HbJIEwB2MPjJdOCbBiUnSXVM&amp;#13;&amp;#10;k1ixhgF7V1VdnEB3qFYyybDyktHoTRZJDJg5GbgQHHIzc1IWAcgwYBJ8BcLBHKVxcpeScMWwaXnh&amp;#13;&amp;#10;1APFTOJqlmt8A7cGIBFg22c4KTgrZk7534py6ELyd1ZKyvLh6gr5BmjDBbLlu0eudo9kq/QEYRAQ&amp;#13;&amp;#10;rIELiYLEEwGciBcsTwsqzrJ5AW4HdVOgrpebj5QX+mIJuMzv8/mSFkzOjj1UVWXlaNWYUKlflTyr&amp;#13;&amp;#10;R0R9IiHv7nHkb0meXejTJ/LsQp9ekWcXAvWKPLsQqFfk2YVAvSLPLgTqFXl2IVCvyLMLge5KnvUI&amp;#13;&amp;#10;xQDiTdJ052iV8r2wB8Hog+cjuWyZlJSpOEkYBbv/UCCCX19twxCn8t8hsFAICBEdPGu+EozPl9EN&amp;#13;&amp;#10;uUpW/IJCHM6fQKwMT4qBoO0bMMm9MUSWKn+wSBQt7p5VFlBdo0mxpCokEvjgSjZdUcWlSb49uXxX&amp;#13;&amp;#10;69d+uOSSs6sVgK0g7+YOKWIRLk9pGicyngeosKS8ZNBfGfkCtgE1JRQ9v0QOPKO3cC5J8vJUcAzK&amp;#13;&amp;#10;fAPbf4W0DcwdZntfaXYI0U3FZr6/Q+UH8H11wzyM78fNfC/9HDLGOwcXzN35nvAcruUQHH843+Q8&amp;#13;&amp;#10;1VHawPPdcSBDnYE7mow8qRp4QnSQ1huNcJY+Zto3fpw6pFnat7TvkHvEmavbtj6RLO2rD50u9LG0&amp;#13;&amp;#10;r1c2NKxTsLRvln40CGRpv0UgS/stAlnabxHI0n6LQJb2WwSytK+XOko8e1S0fwoRajK/LQVLLe0f&amp;#13;&amp;#10;jOZXZvHDaB+WSDctXp4obxas6L4f7e/wvWfWQ4FfRy1f3VvK7Jold7iS+3FG8z3j6dpdJGyj+Taa&amp;#13;&amp;#10;D14py/ffbZ199SD7ef4Py/eW72s7OO67UcPyfYttbfm+RSDL9y0CWb5vEcjyfYtAlu8fLd/PQx4X&amp;#13;&amp;#10;gpzzPGRlmXML+T8E8l1AlSbK12tWvoXycT2+3LPSRPme6/uywOOlfLOFow4fNopvo/iW8r/jbnpL&amp;#13;&amp;#10;+V/fQNSFPjaK32JAWspvEchSfotAlvJbBLKU3yKQpfwWgSzlP1rKl1H8GtrDgn6MEt9pjwTjsFcB&amp;#13;&amp;#10;NhnbvRL33StxQWHhBI8/s7pfBVbXNyRLsFtUdvZV33eLSiWq3Y1SpauogOZh61NcuPOV6wp3/rzK&amp;#13;&amp;#10;NwScWXKXlfZYEUxzAOk5zDaMKkNfKfOHmGx+24yC2wQS4K0ajnyZ8Uk2aPac1NakBCN3NJJ5LWCH&amp;#13;&amp;#10;UVOGia8m1oOkgTnmllPbZUynGpM01BMzVJkV8HlZFi8hbcZprLOV/PopEMTGXNa6X85uilCbIrrQ&amp;#13;&amp;#10;p0+LJrrQp1fulC4E6pU7pQuBeuVO6UKgXrlTuhCoV+6ULgTqlTulC4Ga3SlfIXeZ2bHKbnCI3KWl&amp;#13;&amp;#10;LZ6/jjkYzR95LNieY6DCqFrWaJU+oX4CZVHfadu/TI+mTGj8WUFCla/c9QxpfJnHGyhEdvzeUfLG&amp;#13;&amp;#10;ne9PIBPmEHa7Y567wIM0dl/sfJ9Mh488Zm6wqG6b25i5jZnbmLmNmf+0DP2Vi6n+IPqRToJeQV4X&amp;#13;&amp;#10;AvUK8roQqFeQ14VAvYK8LgTqFeR1IVCvIK8LgZohr55h3ea5Oy5/cp67t+rLxEry8vzvGiHbRHfm&amp;#13;&amp;#10;m5mqO+ZhoUUA8O26eIyryazjRG733ua4Uy6DM/gytZJk+Ql+uRR7yXl+g4ncIWW6CU9px4CM/FbO&amp;#13;&amp;#10;BQz2Hc543+gXcCfDQH6DCPgF4LuqfPR4SNeDiU4GkPDeJMTzht7Y/x8AAP//7JZRb5swEMe/iuXX&amp;#13;&amp;#10;qWqAkKRRqbRm6zQpmqLSas8XcIDVGGY7NO2n351xC+n6EeCFs+7P+e7HGW4245c315ewPh10fXMN&amp;#13;&amp;#10;61Yb+0M0NSMj4dlRdyK/r4rSftW6eeakgW5rLBlFzhTUIuGQ/wk4O9QSEt6BZFF0tYgo8rkmHGtW&amp;#13;&amp;#10;s3gR/6+JxpqILp+h3xVzfcuRwptGVvldJaVb6GK/kZphCgm/c5d/+EwmFXtO+FUcxq6cM58Zh5i5&amp;#13;&amp;#10;67MQdWWFZrKqE756F8G6FJB/V7kr3EIlextTlspRNu1OU6L2lLb9/bbJX8ja432HmQuN1MtGv3L2&amp;#13;&amp;#10;rKFNuPl7BC04kz+VwaSD+XzGmXWLebwMcaHHnv3Yo471pkEU+G5AZRg14fbN3Fhc4dNZU7dgtypt&amp;#13;&amp;#10;MxJSLsT34fQbdOu7wIqT/dWkJbRiaIC+bwatK7Avg4JIY1P7IgXZuTjs+sLRuscyJagi4UJdPKae&amp;#13;&amp;#10;7iCRnQwQE6tBb12GIAuVcMkZah5gn756DFS6xerwLmCrbvWTq1SCrZRfoqvErSpV7I4qQ7J9gT4L&amp;#13;&amp;#10;g5ECfH2cPQmNWwQh2pTveUdkpajFe1vZU/BZQ7hdmX1pxQEyPBFfanUhLSlhLeCDQ0DvyMwHR2YG&amp;#13;&amp;#10;HMjJIfU8HNNOhgMa9/ox+YkPQfF8ooGPOysTH+wfguL5zAc+QbQMFtT9UwMRFQ8oHgFahSv3eZgA&amp;#13;&amp;#10;ERUPaDEACsMVNtDUQXjEiIoHtBwBWs4j+qlMR0wSFQ9oNQAiOvMJ0Bo7iKh4QFcjQIt4OX2kcZzs&amp;#13;&amp;#10;JFHpJ6LRaOnGaKHyHWj4fLJEBQ7g9vQ2aR+NSNt7kdl+gO1HcVQYEspsLZvsSeQbUB0Y92iBc3hZ&amp;#13;&amp;#10;Zd/Awnh98w8AAP//AwBQSwMEFAAGAAgAAAAhAOFRNx/PBgAA5hsAABoAAABjbGlwYm9hcmQvdGhl&amp;#13;&amp;#10;bWUvdGhlbWUxLnhtbOxZzW/cRBS/I/E/jHxvs9/NRt1U2c1uA23aKNkW9Thrz9rTjD3WzGzSvaH2&amp;#13;&amp;#10;iISEKIgDlbhxQEClVuJS/ppAERSp/wJvZmyvJ+uQtI2gguaQtZ9/877fm6/LV+7FDB0QISlPel79&amp;#13;&amp;#10;Ys1DJPF5QJOw590ajy6sekgqnASY8YT0vDmR3pX199+7jNd8RtMJxyIYRyQmCBglcg33vEipdG1l&amp;#13;&amp;#10;RfpAxvIiT0kC36ZcxFjBqwhXAoEPQUDMVhq1WmclxjTx1oGj0oyGDP4lSmqCz8SeZkNQgmOQfnM6&amp;#13;&amp;#10;pT4x2GC/rhFyLgdMoAPMeh7wDPjhmNxTHmJYKvjQ82rmz1tZv7yC17JBTJ0wtjRuZP6ycdmAYL9h&amp;#13;&amp;#10;ZIpwUgitj1rdS5sFfwNgahk3HA4Hw3rBzwCw74OlVpcyz9Zotd7PeZZA9nGZ96DWrrVcfIl/c0nn&amp;#13;&amp;#10;br/fb3czXSxTA7KPrSX8aq3T2mg4eAOy+PYSvtXfGAw6Dt6ALL6zhB9d6nZaLt6AIkaT/SW0Duho&amp;#13;&amp;#10;lHEvIFPOtirhqwBfrWXwBQqyocguLWLKE3VSrsX4LhcjAGggw4omSM1TMsU+5OQAxxNBsRaA1wgu&amp;#13;&amp;#10;fbEkXy6RtCwkfUFT1fM+THHilSAvn33/8tkTdHT/6dH9n44ePDi6/6Nl5IzawklYHvXi28/+fPQx&amp;#13;&amp;#10;+uPJNy8eflGNl2X8rz988svPn1cDoXwW5j3/8vFvTx8//+rT3797WAHfEHhSho9pTCS6QQ7RLo/B&amp;#13;&amp;#10;MOMVV3MyEa82YhxhWh6xkYQSJ1hLqeA/VJGDvjHHLIuOo0efuB68LaB9VAGvzu46Cu9FYqZoheRr&amp;#13;&amp;#10;UewAtzlnfS4qvXBNyyq5eTxLwmrhYlbG7WJ8UCV7gBMnvsNZCn0zT0vH8EFEHDV3GE4UDklCFNLf&amp;#13;&amp;#10;+D4hFdbdodTx6zb1BZd8qtAdivqYVrpkTCdONi0GbdEY4jKvshni7fhm+zbqc1Zl9SY5cJFQFZhV&amp;#13;&amp;#10;KD8mzHHjVTxTOK5iOcYxKzv8OlZRlZJ7c+GXcUOpINIhYRwNAyJl1ZibAuwtBf0aho5VGfZtNo9d&amp;#13;&amp;#10;pFB0v4rndcx5GbnJ9wcRjtMq7B5NojL2A7kPKYrRDldV8G3uVoh+hzjg5MRw36bECffp3eAWDR2V&amp;#13;&amp;#10;Fgmiv8yEjiW0aqcDxzT5u3bMKPRjmwPn146hAT7/+lFFZr2tjXgD5qSqStg61n5Pwh1vugMuAvr2&amp;#13;&amp;#10;99xNPEt2CKT58sTzruW+a7nef77lnlTPZ220i94KbVevG+yi2CyR4xNXyFPK2J6aM3JdmkWyhHki&amp;#13;&amp;#10;GAFRjzM7QVLsmNIIHrO+7uBCgc0YJLj6iKpoL8IpLLDrnmYSyox1KFHKJWzsDLmSt8bDIl3ZbWFb&amp;#13;&amp;#10;bxhsP5BYbfPAkpuanO8LCjZmtgnN5jMX1NQMziqseSljCma/jrC6VurM0upGNdPqHGmFyRDDZdOA&amp;#13;&amp;#10;WHgTFiAIli3g5Q7sxbVo2JhgRgLtdzv35mExUTjPEMkIBySLkbZ7OUZ1E6Q8V8xJAORORYz0Ju8U&amp;#13;&amp;#10;r5WkdTXbN5B2liCVxbVOEJdH702ilGfwIkq6bo+VI0vKxckSdNjzuu1G20M+TnveFPa08BinEHWp&amp;#13;&amp;#10;13yYhXAa5Cth0/7UYjZVvohmNzfMLYI6HFNYvy8Z7PSBVEi1iWVkU8N8ylKAJVqS1b/RBreelwE2&amp;#13;&amp;#10;019Di+YqJMO/pgX40Q0tmU6Jr8rBLlG07+xr1kr5TBGxFwWHaMJmYhdD+HWqgj0BlXA0YTqCfoFz&amp;#13;&amp;#10;NO1t88ltzlnRlU+vDM7SMUsjnLVbXaJ5JVu4qeNCB/NWUg9sq9TdGPfqppiSPydTymn8PzNFzydw&amp;#13;&amp;#10;UtAMdAR8OJQVGOl67XlcqIhDF0oj6o8ELBxM74BsgbNY+AxJBSfI5leQA/1ra87yMGUNGz61S0Mk&amp;#13;&amp;#10;KMxHKhKE7EBbMtl3CrN6NndZlixjZDKqpK5MrdoTckDYWPfAjp7bPRRBqptukrUBgzuef+57VkGT&amp;#13;&amp;#10;UC9yyvXm9JBi7rU18E+vfGwxg1FuHzYLmtz/hYoVs6odb4bnc2/ZEP1hscxq5VUBwkpTQTcr+9dU&amp;#13;&amp;#10;4RWnWtuxlixutHPlIIrLFgOxWBClcN6D9D+Y/6jwmb1t0BPqmO9Cb0Vw0aCZQdpAVl+wCw+kG6Ql&amp;#13;&amp;#10;TmDhZIk2mTQr69ps6aS9lk/W57zSLeQec7bW7CzxfkVnF4szV5xTi+fp7MzDjq8t7URXQ2SPlyiQ&amp;#13;&amp;#10;pvlGxgSm6tZpG6doEtZ7Htz8QKDvwRPcHXlAa2haQ9PgCS6EYLFkb3F6XvaQU+C7pRSYZk5p5phW&amp;#13;&amp;#10;TmnllHZOgcVZdl+SUzrQqfQVB1yx6R8P5bcZsILLbj/ypupcza3/BQAA//8DAFBLAwQUAAYACAAA&amp;#13;&amp;#10;ACEAnGZGQbsAAAAkAQAAKgAAAGNsaXBib2FyZC9kcmF3aW5ncy9fcmVscy9kcmF3aW5nMS54bWwu&amp;#13;&amp;#10;cmVsc4SPzQrCMBCE74LvEPZu0noQkSa9iNCr1AcIyTYtNj8kUezbG+hFQfCyMLPsN7NN+7IzeWJM&amp;#13;&amp;#10;k3ccaloBQae8npzhcOsvuyOQlKXTcvYOOSyYoBXbTXPFWeZylMYpJFIoLnEYcw4nxpIa0cpEfUBX&amp;#13;&amp;#10;NoOPVuYio2FBqrs0yPZVdWDxkwHii0k6zSF2ugbSL6Ek/2f7YZgUnr16WHT5RwTLpRcWoIwGMwdK&amp;#13;&amp;#10;V2edNS1dgYmGff0m3gAAAP//AwBQSwECLQAUAAYACAAAACEAu+VIlAUBAAAeAgAAEwAAAAAAAAAA&amp;#13;&amp;#10;AAAAAAAAAAAAW0NvbnRlbnRfVHlwZXNdLnhtbFBLAQItABQABgAIAAAAIQCtMD/xwQAAADIBAAAL&amp;#13;&amp;#10;AAAAAAAAAAAAAAAAADYBAABfcmVscy8ucmVsc1BLAQItABQABgAIAAAAIQAdRHjDRgsAAO97AAAf&amp;#13;&amp;#10;AAAAAAAAAAAAAAAAACACAABjbGlwYm9hcmQvZHJhd2luZ3MvZHJhd2luZzEueG1sUEsBAi0AFAAG&amp;#13;&amp;#10;AAgAAAAhAOFRNx/PBgAA5hsAABoAAAAAAAAAAAAAAAAAow0AAGNsaXBib2FyZC90aGVtZS90aGVt&amp;#13;&amp;#10;ZTEueG1sUEsBAi0AFAAGAAgAAAAhAJxmRkG7AAAAJAEAACoAAAAAAAAAAAAAAAAAqhQAAGNsaXBi&amp;#13;&amp;#10;b2FyZC9kcmF3aW5ncy9fcmVscy9kcmF3aW5nMS54bWwucmVsc1BLBQYAAAAABQAFAGcBAACtFQAA&amp;#13;&amp;#10;AAA=&amp;#13;&amp;#10;" o:spid="_x0000_i1026"&gt;&lt;v:imagedata mce_src="file:///C:\Users\mlawrenc\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" src="file:///C:\Users\mlawrenc\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:title="" cropleft="-133f" cropbottom="-279f"&gt;&lt;/v:imagedata&gt;&lt;o:lock v:ext="edit" aspectratio="f"&gt;&lt;/o:lock&gt;&lt;/v:shape&gt;&lt;/SPAN&gt;&lt;SPAN style="TEXT-DECORATION: none; text-underline: none"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/H2&gt;
&lt;H2 style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;&lt;U&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/H2&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;IMG style="WIDTH: 631px; HEIGHT: 278px" title="Text separated from rendering" alt="Text separated from rendering" src="http://blogs.msdn.com/photos/directx/images/9938516/original.aspx" width=631 height=278 mce_src="http://blogs.msdn.com/photos/directx/images/9938516/original.aspx"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;This separation is accomplished by allowing an application to implement a callback interface (&lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;IDWriteTextRenderer&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;) and then target a particular glyph rendering API to render the laid-out glyphs. For GDI, this would be &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;ExtTextOut&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;, for Direct2D &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;ID2D1RenderTarget::DrawGlyphRun&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; and for DirectWrite &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;IDWriteBitmapRenderTarget::DrawGlyphRun&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;. Conveniently, &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;DrawGlyphRun&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; in both Direct2D and DirectWrite have exactly compatible parameters to the &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;DrawGlyphRun&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; method that the application implements on &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;IDWriteTextRenderer&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Following a similar separation, text specific features such as font enumeration and management, glyph analysis, etc. are handled by DirectWrite rather than Direct2D. The DirectWrite objects are accepted directly by Direct2D. To help existing GDI applications to take advantage of DirectWrite, it provides the &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;IDWriteGDIInteropMethod&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; interface with methods to:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Create a DirectWrite Font from a GDI Logical Font (&lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;CreateFontFromLOGFONT&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;).&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Convert from a DirectWrite Font Face to a GDI Logical Font (&lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;ConvertFontFacetoLOGFONT&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;).&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Retrieve the Direct Write Font Face from the one currently selected into an HDC. (&lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;CreateFontFaceFromHDC&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;).&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Create a DirectWrite bitmap render target in system memory (&lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;CreateBitmapRenderTarget&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;).&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;&lt;FONT size=3 face=Calibri&gt;&lt;U&gt;&lt;/U&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/H2&gt;
&lt;H1 style="MARGIN: 0in 0in 0pt"&gt;&lt;U&gt;&lt;FONT size=4&gt;&lt;FONT face=Calibri&gt;Glyphs versus Text&lt;SPAN style="TEXT-DECORATION: none; text-underline: none"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/H1&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Both Direct2D and DirectWrite have a very strict separation in the API between Text and Glyphs. Text is a set of Unicode code points (characters), with various stylistic modifiers (fonts, weights, underlines, strikethroughs etc.) that is laid out within a rectangle. A glyph, in contrast, is a particular index into a particular font file. A glyph defines a set of curves which can be rendered, but, it doesn’t have any textual meaning. There is potentially a many to many mapping between glyphs and characters. A sequence of glyphs that come from the same Font Face and that are laid-out sequentially on a baseline is called a GlyphRun. Both DirectWrite and Direct2D call their most precise glyph rendering API &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;DrawGlyphRun&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; and they have very similar signatures. We’ll show Direct2D’s:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=code&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;STDMETHOD_(void, DrawGlyphRun)(&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=code&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;D2D1_POINT_2F baselineOrigin,&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=code&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;__in CONST DWRITE_GLYPH_RUN *glyphRun,&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=code&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;__in ID2D1Brush *foregroundBrush,&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=code&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;DWRITE_MEASURING_MODE measuringMode = DWRITE_MEASURING_MODE_NATURAL &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=code&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;) PURE;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Each glyph run starts at an origin and is placed on a line starting from this origin. The glyphs are modified by the current world transform and the selected text rendering settings on the associated render target. This API is generally called directly only by APIs that do their own layout (For example a Word Processor) or by an application that has implemented the &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;IDWriteTextRenderer&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; interface. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H1 style="MARGIN: 0in 0in 0pt"&gt;&lt;U&gt;&lt;FONT size=4&gt;&lt;FONT face=Calibri&gt;DirectWrite and Direct2D&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/H1&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Architecturally, it would be ideal for Direct2D and DirectWrite to have a clear distinction of roles. Direct2D would provide rendering services (&lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;DrawGlyphRun&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;) and DirectWrite would provide layout, fonts and other text services. However, during the design of Direct2D, we very quickly realized that asking an application to implement the text rendering interface to replace the equivalent of USER32’s &lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;DrawText&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; API would probably be too large a burden initially. Conversely, applications will want a way to do basic glyph rendering through DirectWrite without pulling in all of D2D. So, the relationship is a little more complex, and DirectWrite provides for glyph rendering through the &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;IDWriteBitmapRenderTarget::DrawGlyphRun&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; API. Similarly Direct2D provides some APIs that accept text rather than Glyphs through &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;ID2D1RenderTarget::DrawTextLayout&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; and &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;ID2D1RenderTarget::DrawText&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;. An application’s usage of text tends to start simple: put OK or Cancel on a fixed-layout button, for example.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;But, over time it becomes more complex as internationalization and other features are added. Eventually many applications will reach the point where using DirectWrite’s text layout objects and implementing the text renderer will become necessary.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;For this reason, Direct2D provides layered APIs that allow an application to start simply and grow more sophisticated without having to back-track or abandon their working code. A simplified view is shown below:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;IMG style="WIDTH: 774px; HEIGHT: 329px" title="DrawText migration" alt="DrawText migration" src="http://blogs.msdn.com/photos/directx/images/9938518/original.aspx" width=774 height=329 mce_src="http://blogs.msdn.com/photos/directx/images/9938518/original.aspx"&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;&lt;v:shape style="WIDTH: 579.75pt; HEIGHT: 246pt" id=_x0000_i1025 type="#_x0000_t75" o:ole=""&gt;&lt;v:imagedata mce_src="file:///C:\Users\mlawrenc\AppData\Local\Temp\msohtmlclip1\01\clip_image003.emz" src="file:///C:\Users\mlawrenc\AppData\Local\Temp\msohtmlclip1\01\clip_image003.emz" o:title=""&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;DrawText &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;This is the simplest of the APIs to use. It takes a Unicode string, a foreground brush, a single format object and a destination rectangle. It will lay-out and render the entire string within the layout rectangle, and optionally clip it. This is useful when putting a simple piece of text within a piece of fixed-layout UI.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;DrawTextLayout&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;If the application would like to start measuring and arranging the text and other UI elements, or, if it wants to support multiple fonts, styles, underlines and strikethroughs; it can create a text layout object using DirectWrite. Direct2D provides the &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;DrawTextLayout&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; API that directly accepts this object and renders the text at a given point. (The width and height are provided by the layout object). As well as implementing all of the expected text layout features, Direct2D will interpret any effect object as a brush and apply that brush to the selected range of glyphs. It will also call any inline objects, which allows an application to insert non-glyph “characters” (icons) into the text if it wishes. Another advantage of using a text layout object is that the glyph positions are cached in it. Hence, there is a large performance gain to be had by reusing the same layout object for multiple draw calls and avoiding recalculating the glyph positions for each call. This capability is not present for USER32’s &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;DrawText&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;DrawGlyphRun&lt;/B&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;BR&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Finally, the application can implement the &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;IDWriteTextRenderer&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; interface themselves and call &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;DrawGlyphRun&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; and &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;FillRectangle&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; themselves (or any other rendering API). All of the existing interaction with the Text Layout object will remain unchanged.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H1 style="MARGIN: 0in 0in 0pt"&gt;&lt;U&gt;&lt;FONT size=4&gt;&lt;FONT face=Calibri&gt;Glyph Rendering in Direct2D versus DirectWrite&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/H1&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;DirectWrite allows an existing GDI application to obtain advanced text rendering features such as:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Sub-pixel ClearType. This allows an application to place glyphs on sub-pixel positions to allow for both sharp glyph rendering as well as even glyph layout.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Y-direction anti-aliasing. This allows smoother rendering of curves on larger glyphs.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;The application can obtain these without having to pull in other DirectX APIs through the &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;IDWriteBitmapRenderTarget&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; API. This allows glyphs to be rendered with a solid color to a memory DC. An application moving to Direct2D will also obtain the following features:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Hardware acceleration.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;The ability to fill text with an arbitrary brush. (Radial Gradients, Linear Gradients and Bitmaps).&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;More support for layering and clipping through the &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;PushAxisAlignedClip&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;, &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;PushLayer&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; and &lt;/FONT&gt;&lt;SPAN class=codeChar&gt;&lt;FONT face="Courier New"&gt;CreateCompatibleRenderTarget&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; APIs.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;The ability to support Grayscale text rendering. This correctly populates the destination alpha channel according to both the text brush opacity and the anti-aliasing of the text.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;In order to efficiently support hardware acceleration, Direct2D uses a slightly different approximation to Gamma correction called “alpha correction”. This doesn’t require Direct2D to inspect the render target color pixel when rendering text. Although this could be done entirely on the GPU by reading from the render target to another texture, this would prevent Direct2D from batching its calls to Direct3D efficiently since a batch would not be able to span any render target read-back. (See &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/magazine/dd861344.aspx" mce_href="http://msdn.microsoft.com/en-us/magazine/dd861344.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;the MSDN article&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt; by Kenny Kerr to obtain more information about Direct2D batching).&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H1 style="MARGIN: 0in 0in 0pt"&gt;&lt;U&gt;&lt;FONT size=4&gt;&lt;FONT face=Calibri&gt;Conclusion&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/H1&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;We hope that this article helps you understand the differences and similarities between Direct2D and DirectWrite as well as the architectural motivations for providing these as separate technologies. For more information please see:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd370990.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd370990.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;The Direct2D reference on MSDN&lt;/FONT&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd368038.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd368038.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;The DirectWrite reference on MSDN&lt;/FONT&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9938514" width="1" height="1"&gt;</content><author><name>Mark Lawrence</name><uri>http://blogs.msdn.com/members/Mark+Lawrence.aspx</uri></author><category term="Graphics" scheme="http://blogs.msdn.com/directx/archive/tags/Graphics/default.aspx" /><category term="DirectX" scheme="http://blogs.msdn.com/directx/archive/tags/DirectX/default.aspx" /><category term="GDI+" scheme="http://blogs.msdn.com/directx/archive/tags/GDI_2B00_/default.aspx" /><category term="GDI" scheme="http://blogs.msdn.com/directx/archive/tags/GDI/default.aspx" /><category term="Direct2D" scheme="http://blogs.msdn.com/directx/archive/tags/Direct2D/default.aspx" /><category term="DirectWrite" scheme="http://blogs.msdn.com/directx/archive/tags/DirectWrite/default.aspx" /></entry><entry><title>Animated 2D Graphics for UI, Games, and Demos</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/directx/archive/2009/12/12/animated-2d-graphics-for-ui-games-and-demos.aspx" /><id>http://blogs.msdn.com/directx/archive/2009/12/12/animated-2d-graphics-for-ui-games-and-demos.aspx</id><published>2009-12-12T02:14:00Z</published><updated>2009-12-12T02:14:00Z</updated><content type="html">&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-STYLE: normal; COLOR: windowtext; FONT-SIZE: 13.5pt; FONT-WEIGHT: normal; mso-fareast-font-family: 'MS Mincho'; mso-bidi-font-family: Arial; mso-ascii-font-family: Cambria; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In this post, I present a sample animation framework that demonstrates how Direct2D and DirectWrite can be used in a wide variety of applications. This post is targeted at game developers and demoscene coders who want to take advantage of modern hardware-accelerated components.&lt;/P&gt;
&lt;P&gt;Direct2D was designed for applications that need graphics intensive operations and yet demand high performance and reliability; these applications include internet browsers, office applications, and graphics editors. But Direct2D’s applicability extends beyond these problem domains and well into the realms of games and art. &lt;/P&gt;
&lt;P&gt;Graphics sell games. Therefore, they need to be very fast and look great. Even though the majority of games are heavily 3D, there is also a large chunk of 2D graphics in games, particularly UI components and textures. Also games from some genres, such as puzzle, strategy, and educational games, mostly use 2D graphics. &lt;/P&gt;
&lt;P&gt;Then there is the “demoscene,” a competitive, computer arts subculture, where teams of amateur coders, musicians and graphics artists create demos, programs that include hard-to-code visual effects with graphics and synchronized music, much like music videos. 2D graphics in particular is a rising trend in demos in the last few years (see Masagin by Farbraush &amp;amp; Neuro or Metamorphosis by ASD for example)&lt;/P&gt;
&lt;P&gt;While differences remain among a graphical editor application such as Adobe Illustrator, a real time strategy game and a demoscene demo, they present some of the same challenges:&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;A continuous float 2D problem space: The focus can move to different sections of the space, zooming in and out.&lt;/LI&gt;
&lt;LI&gt;Lots of cool animations: Animations contain a lot of visual information and contribute to the flow and artistic composition of non interactive sequences in games (i.e. cut scenes) as well as all the game world and characters. Game UIs often make heavy use of animation.&lt;/LI&gt;
&lt;LI&gt;Interoperability with Direct3D: If you are creating a 3D game, the chances are that you’ve already been using&amp;nbsp; Direct3D. Therefore it is crucial that what you do with your 2D API works nicely with Direct3D. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Direct2D is really great for addressing these issues. All drawings in Direct2D happen in a continuous float space, with the ability to apply transformation matrices with a few lines of code. Direct2D also gives you a lot of power for rich animation by providing very fast animation methods for transforms and by minimizing graphics bus traffic with the use of mesh and mask capabilities. Direct2D is further designed to interoperate well with Direct3D. By using Direct2D, you can directly render into Direct3D textures and use those textures to wrap your 3D models. For more information about Direct2D, see &lt;A href="http://msdn.microsoft.com/en-us/library/dd370990(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd370990(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/dd370990(VS.85).aspx&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-STYLE: normal; COLOR: windowtext; FONT-SIZE: 13.5pt; FONT-WEIGHT: normal; mso-fareast-font-family: 'MS Mincho'; mso-bidi-font-family: Arial; mso-ascii-font-family: Cambria; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;&lt;STRONG&gt;The Graphimation Framework Basics&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;During the development of Direct2D, I had the opportunity to actually apply some of these ideas to a prototype scenario. Once I recognized the value Direct2D has for the mentioned application spaces, I decided to design an animated 2D graphics framework in native C++, called the Graphimation Framework. I then used the framework to create three applications to showcase what you can do with the framework.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Direct2D Demo: A non-interactive demoscene-style demo.&lt;/LI&gt;
&lt;LI&gt;Carousel: A modern animated UI prototype that has arbitrarily-shaped widgets.&lt;/LI&gt;
&lt;LI&gt;D2DRTS: A simple real time strategy game.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;With the ease of use and direct applicability that Direct2D possesses, I was able to implement these applications in about 4 weeks.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Disclaimer&lt;/STRONG&gt;: All the code and documentation for Graphimation Framework is provided to the developer community as an example and is not an official Microsoft product. You can access the download at: &lt;A href="http://code.msdn.microsoft.com/graphimation"&gt;http://code.msdn.microsoft.com/graphimation&lt;/A&gt;&lt;/P&gt;&lt;STRONG&gt;
&lt;H3 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: black; FONT-SIZE: 12pt; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-STYLE: normal; COLOR: windowtext; FONT-SIZE: 13.5pt; FONT-WEIGHT: normal; mso-fareast-font-family: 'MS Mincho'; mso-bidi-font-family: Arial; mso-ascii-font-family: Cambria; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;&lt;STRONG&gt;Graphimation Framework&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H3&gt;&lt;/STRONG&gt;
&lt;P&gt;Let’s take a closer look at what the Graphimation Framework provides.&amp;nbsp; It provides an interface called IGraphimation. This interface encapsulates a graphics object that can be rendered and includes some animations. It can also provide some named variables that its client can set to customize certain aspects of the graphimation object. You can also hit test against a graphimation.&lt;/P&gt;
&lt;P&gt;A graphimation object is defined and initialized by an external file (a .d2g file). Once a graphimation object is initialized, you need to call render() on it from your render function, and update() it with time passed between each invocation of the main loop. &lt;/P&gt;
&lt;P&gt;Each graphimation object (for example, a soldier in the RTS game) defines one or more animations. Through the render + update mechanics, each animation automatically keeps playing. Animations can also loop or tie into other animations. All this is automatically handled by the Graphimation Framework. The client can switch any animation.&amp;nbsp; For example, to make a soldier walk, the application calls PlayAnimation(“walk”).&lt;/P&gt;
&lt;P&gt;If you want to see more information about how to create and use graphimations, see the GraphimationFrameworkManual.docx file in the Doc folder in the sources. It provides information about the internal workings of the framework.&lt;/P&gt;&lt;STRONG&gt;
&lt;H3 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: black; FONT-SIZE: 12pt; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-STYLE: normal; COLOR: windowtext; FONT-SIZE: 13.5pt; FONT-WEIGHT: normal; mso-fareast-font-family: 'MS Mincho'; mso-bidi-font-family: Arial; mso-ascii-font-family: Cambria; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;&lt;STRONG&gt;.d2g files&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H3&gt;&lt;/STRONG&gt;
&lt;P&gt;All the graphics and animations are defined in the d2g files. A d2g file defines the following:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Resources, such as geometries, brushes, and transforms.&lt;/LI&gt;
&lt;LI&gt;Render functions, such as Fill, Stroke, and PushTransform.&lt;/LI&gt;
&lt;LI&gt;Controllers that can be bound to variables, such as linear and sinusoidal.&lt;/LI&gt;
&lt;LI&gt;Named animations, such as&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;a render function that refers to resources to render stuff,&lt;/LI&gt;
&lt;LI&gt;and a main controller (that can include other controllers) tied to variables which cause the “change” in animations. &lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;In a d2g file, you can put a variable name almost anywhere that you can write a constant number. These variables can then either be set from outside the framework by the SetVariable interface or internally controlled by a controller. &lt;/P&gt;
&lt;P&gt;A graphimation object can also contain other graphimation objects as resources and render or update them. Therefore whole hierarchies of graphimation objects can be built and easily controlled. In fact, the entire Direct2D Demo is a single graphimation object that includes many others (like the fish, the plants, and the butterfly). Check out the manual for advanced techniques in using graphimations. Also please refer to the manual for further info on the d2g file syntax.&lt;/P&gt;&lt;STRONG&gt;
&lt;H3 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: black; FONT-SIZE: 12pt; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-STYLE: normal; COLOR: windowtext; FONT-SIZE: 13.5pt; FONT-WEIGHT: normal; mso-fareast-font-family: 'MS Mincho'; mso-bidi-font-family: Arial; mso-ascii-font-family: Cambria; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;&lt;STRONG&gt;Framework Library Dependencies and Implementation Details&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H3&gt;&lt;/STRONG&gt;
&lt;P&gt;Implementing this framework was very easy with Direct2D and took only about two-dev weeks. A large portion of the code is for parsing the d2g files. Since Direct2D maps to this problem so well, the rest of the code is just simple wrapper classes around Direct2D classes with ten – twenty lines of code each.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: black; FONT-SIZE: 12pt; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-STYLE: normal; COLOR: windowtext; FONT-SIZE: 13.5pt; FONT-WEIGHT: normal; mso-fareast-font-family: 'MS Mincho'; mso-bidi-font-family: Arial; mso-ascii-font-family: Cambria; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;&lt;STRONG&gt;Library Dependencies&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/STRONG&gt;
&lt;P&gt;Graphimation Framework depends pretty heavily on STL and Boost. The Graphimation Framework only needs the headers from the Boost libraries, so you only need to download Boost—you don’t have to build it. You do need to add the Boost path to your include path in Visual Studio. &lt;/P&gt;
&lt;P&gt;You also need the Windows 7 SDK, which is available at &lt;A href="http://msdn.microsoft.com/en-us/windows/bb980924.aspx" mce_href="http://msdn.microsoft.com/en-us/windows/bb980924.aspx"&gt;http://msdn.microsoft.com/en-us/windows/bb980924.aspx&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;As Graphimation is provided as a Visual C++2008 project, you also need a version of Visual Studio 2008. The free express one from &lt;A href="http://www.microsoft.com/exPress/" mce_href="http://www.microsoft.com/exPress/"&gt;http://www.microsoft.com/exPress/&lt;/A&gt; will do.&lt;/P&gt;&lt;STRONG&gt;
&lt;H3 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: black; FONT-SIZE: 12pt; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-STYLE: normal; COLOR: windowtext; FONT-SIZE: 13.5pt; FONT-WEIGHT: normal; mso-fareast-font-family: 'MS Mincho'; mso-bidi-font-family: Arial; mso-ascii-font-family: Cambria; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;&lt;STRONG&gt;Implementation Details and Class Diagrams&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H3&gt;&lt;/STRONG&gt;
&lt;P&gt;Throughout the framework the RAII concept is used to control all the resources, so the framework satisfies the “basic exception safety” guarantee that no resources will be leaked on the face of exceptions (which may happen due to STL, Boost, or new -- GXM also converts D2D errors into exceptions too). However, the framework does NOT provide “strong exception safety,” meaning that, in the case of an exception, the object may not be in a usable state. Finally, any exceptions thrown from Boost or STL are caught at the module boundary and converted to error codes. Therefore, the client code does not see any exceptions.&lt;/P&gt;
&lt;P&gt;The following diagram shows a group of main classes and their relationships.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 511px; HEIGHT: 419px" title="uml diagram" alt="uml diagram" align=middle src="http://blogs.msdn.com/photos/directx/images/9928848/original.aspx" width=511 height=419 mce_src="http://blogs.msdn.com/photos/directx/images/9928848/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: black; FONT-SIZE: 12pt; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-STYLE: normal; COLOR: windowtext; FONT-SIZE: 13.5pt; FONT-WEIGHT: normal; mso-fareast-font-family: 'MS Mincho'; mso-bidi-font-family: Arial; mso-ascii-font-family: Cambria; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;&lt;STRONG&gt;Samples Using the Graphimation Framework&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/STRONG&gt;
&lt;P&gt;Here I describe three samples that use the Graphimation Framework:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Direct2D Demo: a non-interactive demoscene style demo.&lt;/LI&gt;
&lt;LI&gt;Carousel: a modern animated UI prototype that has arbitrarily-shaped widgets.&lt;/LI&gt;
&lt;LI&gt;D2DRTS: a 2D real-time strategy game prototype.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: black; FONT-SIZE: 12pt; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;The Direct2D Demo&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/STRONG&gt;
&lt;P&gt;By using the framework, I implemented a simple player that can play a .d2g file, and then created a set of nested .d2g files that made up a demoscene style demo. You can see what is shown in the following screen shot by running the demo.bat file in the GxmPlayer sources. &lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 403px; HEIGHT: 301px" title="D2D demo" alt="D2D demo" src="http://blogs.msdn.com/photos/directx/images/9928851/original.aspx" width=403 height=301 mce_src="http://blogs.msdn.com/photos/directx/images/9928851/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: black; FONT-SIZE: 12pt; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;Carousel Widget Library&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;By using this framework, I implemented an animated UI framework prototype called Carousel with only a few hundred lines of code. Simply each widget has a corresponding Graphimation object that can be animated in different ways. For example, the following screen shot shows several parent and child widgets,&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 378px; HEIGHT: 347px" title="Carousel Demo" alt="Carousel Demo" src="http://blogs.msdn.com/photos/directx/images/9928852/original.aspx" width=378 height=347 mce_src="http://blogs.msdn.com/photos/directx/images/9928852/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;When a parent widget is clicked, child widget graphimations simply play an animation (they “open up” around their parent). The idea was providing menu navigation with minimum distance of mouse movement. All options in a menu are at a small distance from where your mouse is, thanks to the circular structure of the menus. Another interesting point is that, since Direct2D provides hit testing with arbitrary geometries, your widgets do not have to be rectangular. The Graphimation Framework provides hit testing for any sub resources it contains. &lt;/P&gt;&lt;STRONG&gt;
&lt;H3 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; COLOR: black; FONT-SIZE: 12pt; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;D2DRTS - A 2D Real Time Strategy Game Prototype&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Writing a simple RTS game became a lot easier with the&amp;nbsp; Graphimation Framework. As mentioned before, the soldiers are instances of the same graphimation type (i.e. the same .d2g file). They support a set of animations (stand, walk, fight, die etc.) and once all the graphical concerns are handled by the Graphimation Framework, the remaining game code is greatly simplified. In the example shown in the following screen shot, all I did was to implement a few classes for the game world, soldier and AI, and it only took a few hundred lines!&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 498px; HEIGHT: 372px" title="D2D RTS" alt="D2D RTS" src="http://blogs.msdn.com/photos/directx/images/9928853/original.aspx" width=498 height=372 mce_src="http://blogs.msdn.com/photos/directx/images/9928853/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4 face=Cambria&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;FONT size=4 face=Cambria&gt;Conclusions&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Of course a real UI framework, a real game, or a real demoscene demo will need to be more complex, but these examples help show how easy it can be to build a 2D graphic animation framework with Direct2D and be able to reuse it in a variety of cool applications.&lt;/P&gt;
&lt;P&gt;In summary, this blog post provided a perspective on the applicability of Direct2D on certain sets of applications. A set that is not necessarily the one that comes to mind when speaking of Direct2D. Irrespective of which industry you develop software for, if your problem domain includes issues like “animated 2D graphics” and “a continuous 2D float coordinate space”, then you might enjoy a number of benefits from using Direct2D.&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Bilgem Cakir, Direct2D Team&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9935987" width="1" height="1"&gt;</content><author><name>Aisha Ayoub</name><uri>http://blogs.msdn.com/members/Aisha+Ayoub.aspx</uri></author><category term="Direct2D" scheme="http://blogs.msdn.com/directx/archive/tags/Direct2D/default.aspx" /><category term="DirectWrite" scheme="http://blogs.msdn.com/directx/archive/tags/DirectWrite/default.aspx" /><category term="Animation" scheme="http://blogs.msdn.com/directx/archive/tags/Animation/default.aspx" /><category term="Games" scheme="http://blogs.msdn.com/directx/archive/tags/Games/default.aspx" /><category term="Demoscene" scheme="http://blogs.msdn.com/directx/archive/tags/Demoscene/default.aspx" /></entry><entry><title>Talks from PDC 2009 now available!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/directx/archive/2009/11/25/talks-from-pdc-2009-now-available.aspx" /><id>http://blogs.msdn.com/directx/archive/2009/11/25/talks-from-pdc-2009-now-available.aspx</id><published>2009-11-25T20:00:00Z</published><updated>2009-11-25T20:00:00Z</updated><content type="html">&lt;P style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class=MsoNormal&gt;&lt;A href="http://microsoftpdc.com/" mce_href="http://microsoftpdc.com/"&gt;&lt;FONT color=#0000ff size=3 face="Times New Roman"&gt;PDC&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face="Times New Roman"&gt; this year had two sessions on DirectX technologies.&amp;nbsp; If you attended them: thank you!&amp;nbsp; For those who weren’t able to attend, the good news is that the sessions are now available online for viewing.&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class=MsoNormal&gt;&lt;FONT size=3 face="Times New Roman"&gt;“&lt;/FONT&gt;&lt;A href="http://microsoftpdc.com/Sessions/CL14" mce_href="http://microsoftpdc.com/Sessions/CL14"&gt;&lt;FONT color=#0000ff size=3 face="Times New Roman"&gt;Advanced Graphics Functionality Using DirectX”&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face="Times New Roman"&gt; is about Direct2D and DirectWrite, and builds atop last year’s &lt;/FONT&gt;&lt;A href="http://channel9.msdn.com/pdc2008/PC18/" mce_href="http://channel9.msdn.com/pdc2008/PC18/"&gt;&lt;FONT color=#0000ff size=3 face="Times New Roman"&gt;“Introducing Direct2D and DirectWrite”&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face="Times New Roman"&gt; PDC talk.&amp;nbsp; The second is &lt;/FONT&gt;&lt;A href="http://microsoftpdc.com/Sessions/CL15" mce_href="http://microsoftpdc.com/Sessions/CL15"&gt;&lt;FONT color=#0000ff size=3 face="Times New Roman"&gt;“Modern 3D Graphics Using Windows 7 and Direct3D 11 Hardware”&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face="Times New Roman"&gt;, and is about Direct3D 11, WARP, and Direct3D 10 Level 9. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class=MsoNormal&gt;&lt;FONT size=3 face="Times New Roman"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class=MsoNormal&gt;&lt;FONT size=3 face="Times New Roman"&gt;As always, we appreciate comments and suggestions for future blog posts.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9928859" width="1" height="1"&gt;</content><author><name>Aisha Ayoub</name><uri>http://blogs.msdn.com/members/Aisha+Ayoub.aspx</uri></author></entry><entry><title>Internet Explorer announces to use DirectWrite &amp; Direct2D!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/directx/archive/2009/11/18/internet-explorer-announces-to-use-directwrite-direct2d.aspx" /><id>http://blogs.msdn.com/directx/archive/2009/11/18/internet-explorer-announces-to-use-directwrite-direct2d.aspx</id><published>2009-11-18T15:00:00Z</published><updated>2009-11-18T15:00:00Z</updated><content type="html">&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;Today, the Internet Explorer (IE) team announced they will be using DirectWrite and Direct2D for IE9!&amp;nbsp; Channel 9 takes us through to the halls of IE team, and shows a sneak peek at what they have in store for &lt;A href="http://channel9.msdn.com/posts/Charles/IE-9-Surfing-on-the-GPU-with-D2D/"&gt;&lt;SPAN style="COLOR: blue; mso-bidi-font-size: 11.0pt"&gt;IE9&lt;/SPAN&gt;&lt;/A&gt;.&amp;nbsp;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; COLOR: black; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;Update: check out the &lt;A href="http://blogs.msdn.com/ie/archive/2009/11/18/an-early-look-at-ie9-for-developers.aspx"&gt;&lt;SPAN style="COLOR: blue; mso-bidi-font-size: 11.0pt"&gt;IE team blog&lt;/SPAN&gt;&lt;/A&gt; for their post on this announcement!&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9924833" width="1" height="1"&gt;</content><author><name>Aisha Ayoub</name><uri>http://blogs.msdn.com/members/Aisha+Ayoub.aspx</uri></author><category term="DX" scheme="http://blogs.msdn.com/directx/archive/tags/DX/default.aspx" /><category term="Graphics" scheme="http://blogs.msdn.com/directx/archive/tags/Graphics/default.aspx" /><category term="GDI" scheme="http://blogs.msdn.com/directx/archive/tags/GDI/default.aspx" /><category term="Direct2D" scheme="http://blogs.msdn.com/directx/archive/tags/Direct2D/default.aspx" /><category term="DirectWrite" scheme="http://blogs.msdn.com/directx/archive/tags/DirectWrite/default.aspx" /></entry><entry><title>Working Around Problems in ID2D1Bitmap's CopyFromBitmap and CopyFromRenderTarget</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/directx/archive/2009/11/17/working-around-problems-in-id2d1bitmap-s-copyfrombitmap-and-copyfromrendertarget.aspx" /><id>http://blogs.msdn.com/directx/archive/2009/11/17/working-around-problems-in-id2d1bitmap-s-copyfrombitmap-and-copyfromrendertarget.aspx</id><published>2009-11-17T14:50:00Z</published><updated>2009-11-17T14:50:00Z</updated><content type="html">&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Developers using the ID2D1Bitmap::CopyFromBitmap and ID2D1Bitmap::CopyFromRenderTarget APIs may notice problems when the source and destination rectangles are of different sizes. In particular, the source rectangle is incorrectly clipped against the destination bounds (instead of against the source bounds). The destination rectangle is correctly clipped against the destination bounds.&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Terminology: &lt;/FONT&gt;&lt;FONT size=3 face=Calibri&gt;Since the problem in each API is very similar, it is helpful to talk about both problems at the same time. However, in order to do that, we need a common word to refer to either a bitmap or a render target. This post will use the term “Surface”.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;There are two possible manifestations of this problem:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoPlainText&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l1 level1 lfo1" class=MsoPlainText&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;1.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;Access violation (crash)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.25in" class=MsoPlainText&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;This happens when you pass a source rectangle that exceeds the bounds of the source surface but the destination surface is smaller than the source surface. The clipping will be insufficient and may result in a crash. In this case applications can work around this problem by sanitizing their inputs – don’t pass source rectangles that exceed the bounds of the source surface.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoPlainText&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l1 level1 lfo1" class=MsoPlainText&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;2.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;Over-clipping&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.25in" class=MsoPlainText&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;This happens when you pass a source rectangle that doesn’t exceed the bounds of the source surface but does exceed the bounds of the destination surface. The clipping will be overly zealous and less data will be copied than requested. In this case there are three possible workarounds:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoPlainText&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.75in; mso-list: l0 level1 lfo2" class=MsoPlainText&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;a)&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;Use D3D&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.5in" class=MsoPlainText&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;Since the problem is in D2D customers using D3D and D2D together can call the corresponding APIs on the D3D interfaces. This is the option with the best performance, but it may be cumbersome to code in some scenarios. It requires that all associated D2D bitmaps to have been created with ID2D1RenderTarget::CreateSharedBitmap (IDXGISurface variant) and all associated D2D render targets to have been created with ID2D1Factory::CreateDxgiSurfaceRenderTarget. For example:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;IDXGISurface *pSurface;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;ID2D1Factory *pFactory;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;…&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;ID2D1RenderTarget *pRenderTarget = NULL;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;if (SUCCEEDED(pFactory-&amp;gt;CreateDxgiSurfaceRenderTarget(&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pSurface,&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D2D1::RenderTargetProperties(&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D2D1_RENDER_TARGET_TYPE_DEFAULT,&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D2D1::PixelFormat(&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DXGI_FORMAT_UNKNOWN,&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D2D1_ALPHA_MODE_PREMULTIPLIED))&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;pRenderTarget))&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &amp;lt;Snip&amp;gt; Your render target code goes here.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;ID2D1Bitmap *pBitmap = NULL;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;if (SUCCEEDED(pRenderTarget-&amp;gt;CreateSharedBitmap(&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __uuidof(IDXGISurface),&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pSurface,&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D2D1::BitmapProperties(&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D2D1::PixelFormat(&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DXGI_FORMAT_UNKNOWN,&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D2D1_ALPHA_MODE_PREMULTIPLIED)),&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;pBitmap))&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &amp;lt;Snip&amp;gt; Your DXGI surface manipulation code goes here.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pBitmap-&amp;gt;Release();&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt 0.5in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pRenderTarget-&amp;gt;Release();&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: 0.5in; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: #4f81bd"&gt;&lt;FONT size=3&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.5in" class=MsoPlainText&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.5in" class=MsoPlainText&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;These two APIs create D2D objects that wrap D3D textures. An application can hold on to the underlying D3D textures and call the ID3D10Device::CopySubresourceRegion API instead of the ID3D1Bitmap::CopyFromBitmap/ID2D1Bitmap::CopyFromRenderTarget APIs. If you choose this route, make sure you call EndDraw on all associated render targets first (including render targets against which drawing operations involving the bitmaps have been issued).&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoPlainText&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.75in; mso-list: l0 level1 lfo2" class=MsoPlainText&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;b)&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;Use an intermediate bitmap&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.5in" class=MsoPlainText&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;This option is flexible, but it is costly from a performance standpoint (in terms of both memory footprint and speed). If you are attempting to copy from an ID2D1HwndRenderTarget, this is your only option. Create an intermediate bitmap the same size as the source surface. Call CopyFromBitmap / CopyFromRenderTarget to copy the desired region to the upper-left corner of the intermediate bitmap. Then copy from the upper-left corner of the intermediate bitmap to the destination. Even though this requires copying between surfaces of different sizes as the final step, this copy is from the upper-left corner, which ensures that the source rectangle will be within the destination bounds, so it will not be affected by the clipping.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoPlainText&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.75in; mso-list: l0 level1 lfo2" class=MsoPlainText&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;c)&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;Use a DrawBitmap call instead of CopyFromBitmap/CopyFromRenderTarget&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.5in" class=MsoPlainText&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;This option is not as flexible as option 2, but in some cases it will be less costly from a performance standpoint. The DrawBitmap API allows you to specify both a source and a destination rectangle so you can use it instead of CopyFromBitmap/CopyFromRenderTarget, provided that the destination is a render target and that the source is a bitmap. You can create a surface that is both a render target and a bitmap using the ID2D1RenderTarget::CreateCompatibleRenderTarget API. You will not be able to use this option if you wish to copy from an ID2D1HwndRenderTarget. It is not possible to create a surface that is both an ID2D1HwndRenderTarget and an ID2D1Bitmap.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 12pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: Calibri; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;We know that these workarounds are inconvenient to our customers. We hope that by sharing this information we help to minimize this inconvenience.&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9914279" width="1" height="1"&gt;</content><author><name>Tom_Mulcahy</name><uri>http://blogs.msdn.com/members/Tom_Mulcahy.aspx</uri></author></entry><entry><title>Windows Imaging Component: Working with Images in Windows</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/directx/archive/2009/11/13/test.aspx" /><id>http://blogs.msdn.com/directx/archive/2009/11/13/test.aspx</id><published>2009-11-13T00:22:00Z</published><updated>2009-11-13T00:22:00Z</updated><content type="html">&lt;FONT color=#17365d size=7&gt;&lt;FONT color=#17365d size=7&gt;
&lt;H4 style="MARGIN: 10pt 0in 0pt"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-STYLE: normal; COLOR: windowtext; FONT-SIZE: 13.5pt; FONT-WEIGHT: normal; mso-bidi-font-family: Arial; mso-fareast-font-family: 'MS Mincho'; mso-ascii-font-family: Cambria; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;&lt;STRONG&gt;What is it?&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H4&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;B&gt;&lt;I&gt;&lt;FONT color=#4f81bd size=3&gt;&lt;FONT color=#4f81bd size=3&gt;&lt;/B&gt;&lt;/I&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=3 face=Calibri&gt;&lt;FONT size=3 face=Calibri&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd319236(VS.85).aspx"&gt;&lt;U&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Windows Imaging Component (WIC) API&lt;/U&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;&lt;FONT size=3 face=Calibri&gt; enables applications to work with all common image formats. It allows developers to not have to understand intricate details of the image formats they work with. WIC has built-in support for popular formats such as JPEG, PNG, TIFF, and GIF as well as an extensibility model so that developers can create their own WIC decoder and encoder (CODEC) and get platform level support for their image format. WIC is available on Windows XP (SP2 and greater), Windows Vista, Windows Server, and Windows 7. &lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;I&gt;&lt;FONT color=#4f81bd size=3&gt;&lt;FONT color=#4f81bd size=3&gt;
&lt;H4 style="MARGIN: 10pt 0in 0pt"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-STYLE: normal; COLOR: windowtext; FONT-SIZE: 13.5pt; FONT-WEIGHT: normal; mso-bidi-font-family: Arial; mso-fareast-font-family: 'MS Mincho'; mso-ascii-font-family: Cambria; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;&lt;STRONG&gt;Why is it useful?&lt;o:p&gt;&lt;/o:p&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H4&gt;&lt;/I&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=3 face=Calibri&gt;&lt;FONT size=3 face=Calibri&gt;
&lt;P&gt;WIC is designed to handle any scenario that requires decoding or encoding an image. WIC has been widely adopted by developers inside and outside of Microsoft in their applications. The key benefits for using WIC are: &lt;/P&gt;
&lt;P&gt;1) Fast performing CODECs – WIC has been extensively tested and tuned to provide the fastest imaging CODECs on Windows. &lt;/P&gt;
&lt;P&gt;2) Extensive format and CODEC functionality support –WIC supports all major image formats in box and provides an extensibility model for additional formats. WIC also supports common image manipulation operations such as image rotation, scaling, cropping, and pixel format conversion.&lt;/P&gt;
&lt;P&gt;3) Security Testing – WIC has also been thoroughly testedto be secure against malformed image data. Furthermore, since WIC is a core Windows component, it is updated as necessary to be compliant with the latest standard and security requirements.&lt;/P&gt;
&lt;P&gt;4) Interoperation with modern DirectX APIs such as Direct2D and the Windows Color System - Direct2D provides APIs that can consume WIC objects for rendering and encoding images, this makes using WIC with D2D very easy. The Windows Color System has similar APIs available.&lt;/P&gt;
&lt;P&gt;Because of these features, WIC is used in a variety of applications. Also GDI+ in Windows 7 uses WIC CODECs to work with images. Since a large number of applications use WIC, a consistent experience working with image formats is available for Windows Applications. For example, the chances of CODEC incompatibility issues occurring between applications that use WIC to encode and decode images are small.&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;I&gt;&lt;FONT color=#4f81bd size=3&gt;&lt;FONT color=#4f81bd size=3&gt;
&lt;H4 style="MARGIN: 10pt 0in 0pt"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-STYLE: normal; COLOR: windowtext; FONT-SIZE: 13.5pt; FONT-WEIGHT: normal; mso-bidi-font-family: Arial; mso-fareast-font-family: 'MS Mincho'; mso-ascii-font-family: Cambria; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Cambria"&gt;&lt;FONT face=Cambria&gt;&lt;STRONG&gt;How to use it?&lt;o:p&gt;&lt;/o:p&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H4&gt;&lt;/I&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=3 face=Calibri&gt;&lt;FONT size=3 face=Calibri&gt;
&lt;P&gt;Full documentation for WIC is available in Windows SDK and on &lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd319236(VS.85).aspx"&gt;&lt;U&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;MSDN&lt;/U&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;&lt;FONT size=3 face=Calibri&gt;. Links to relevant information are provided below. The &lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://code.msdn.microsoft.com/win7wicsamples"&gt;&lt;U&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;code samples&lt;/U&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;&lt;FONT size=3 face=Calibri&gt; are a good starting point for learning how to use WIC and for accomplishing common tasks such as decoding, encoding, and reading metadata from images. &lt;/P&gt;
&lt;P&gt;An important developer tool for using WIC is WIC Explorer which is a light weight application that exposes all the functionality available in WIC. The source code and binaries for WIC Explorer are available &lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://code.msdn.microsoft.com/wictools/Release/ProjectReleases.aspx?ReleaseId=2887"&gt;&lt;U&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;here&lt;/U&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;&lt;FONT size=3 face=Calibri&gt;. WIC Explorer exposes all available CODECs and metadata handlers installed on a system, and allows developers to see all available data in an image such as thumbnails, metadata, and actual image pixels. A screen shot of WIC Explorer is available in Figure 1 and 2. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=3 face=Calibri&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Calibri&gt;&lt;FONT face=Calibri&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-no-proof: yes"&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;IMG style="WIDTH: 759px; HEIGHT: 368px" src="http://blogs.msdn.com/photos/directx/images/9922208/original.aspx" width=759 height=368 mce_src="http://blogs.msdn.com/photos/directx/images/9922208/original.aspx"&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-no-proof: yes"&gt;&lt;FONT size=3&gt;Figure 1: Image Parameters displayed via WIC Explorer &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal mce_keep="true"&gt;&lt;IMG style="WIDTH: 748px; HEIGHT: 346px" src="http://blogs.msdn.com/photos/directx/images/9922209/original.aspx" width=748 height=346 mce_src="http://blogs.msdn.com/photos/directx/images/9922209/original.aspx"&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;Figure 2: Creation code for reading metadata from an image. This information is located below the image bits shown in Figure 1. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;WIC Explorer is also useful for testing images and determining whether they are compliant with standards and WIC CODECs. WIC Explorer also provides reference implementation of an actual application that uses WIC. The image creation code, which is located below the image in the right pane, provides code that can be run to expose functionality, such as metadata extraction. This tool is useful for any developer that wishes to use the WIC API. &lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;Another useful tool for developers looking to create their own WIC CODEC is WIC COP, which is available &lt;A href="http://code.msdn.microsoft.com/wictools/Release/ProjectReleases.aspx?ReleaseId=2887"&gt;&lt;FONT color=#0000ff&gt;here&lt;/FONT&gt;&lt;/A&gt;. Documentation on how to create a WIC CODEC is available &lt;A href="http://msdn.microsoft.com/en-us/library/cc956175(VS.85).aspx"&gt;&lt;FONT color=#0000ff&gt;here&lt;/FONT&gt;&lt;/A&gt;. WIC COP is used to test custom CODECs for proper functionality, performance, and registration. WIC COP reports any problems that may exist in a custom CODEC. This tool is invaluable for developers looking to create their own CODEC.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;The WIC documentation, code samples, and developer tools provide a good set of resources for learning and using the WIC API.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H4 style="MARGIN: 10pt 0in 0pt"&gt;&lt;EM&gt;&lt;FONT color=#4f81bd&gt;&lt;FONT face=Cambria&gt;
&lt;H4 style="MARGIN: 10pt 0in 0pt"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-STYLE: normal; COLOR: windowtext; FONT-SIZE: 13.5pt; FONT-WEIGHT: normal; mso-bidi-font-family: Arial; mso-fareast-font-family: 'MS Mincho'; mso-ascii-font-family: Cambria; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Cambria"&gt;&lt;STRONG&gt;What new features are available in Windows 7 and Windows Vista?&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/EM&gt;&lt;/H4&gt;&lt;/H4&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;In Windows 7 additional features were added to help complete scenarios for developers and to provide greater level of interoperability between applications that use WIC. All of the new WIC features are available in Windows 7 and will also be available on Windows Vista using a Platform Update download, more information is provided below. Many of the new WIC features are also explained in &lt;A href="http://channel9.msdn.com/posts/yochay/Windows-7-Graphics-WIC/"&gt;&lt;FONT color=#0000ff&gt;this informational video&lt;/FONT&gt;&lt;/A&gt; and in this &lt;A href="http://msdn.microsoft.com/en-us/library/dd408864(VS.85).aspx"&gt;&lt;FONT color=#0000ff&gt;MSDN article&lt;/FONT&gt;&lt;/A&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;In order to support scenarios that involve working with images from the internet, support for decoding progressively encoded images was added. Progressive decoding is used to provide previews of images without having to actually download the complete image, which can often be slow. The new progressive decoding API and the feature are explained in &lt;A href="http://msdn.microsoft.com/en-us/library/dd408863(VS.85).aspx"&gt;&lt;FONT color=#0000ff&gt;this article&lt;/FONT&gt;&lt;/A&gt; and in &lt;A href="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=win7wicsamples&amp;amp;DownloadId=7546"&gt;&lt;FONT color=#0000ff&gt;this code sample&lt;/FONT&gt;&lt;/A&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;Another important scenario for developers working with images from the internet is the ability to animate GIF images. WIC now supports reading and writing GIF metadata, which contains timing information necessary for animating GIF images. A code sample is &lt;A href="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=win7wicsamples&amp;amp;DownloadId=7547"&gt;&lt;FONT color=#0000ff&gt;available here&lt;/FONT&gt;&lt;/A&gt; that shows how to extract GIF metadata data and animate an image with Direct2D. WIC also supports additional TIFF formats such as JPEG encoded TIFF, Planar TIFFs, and tiled TIFFs. These image formats are created by popular imaging applications.&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;An important feature for any user working with digital photographs is the ability to preserve metadata across a variety of applications and platforms. By implementing the guidance of the &lt;A href="http://www.metadataworkinggroup.com/"&gt;&lt;FONT color=#0000ff&gt;Metadata Working Group&lt;/FONT&gt;&lt;/A&gt; (MWG), images edited and viewed in Windows 7 are compatible with a large variety of applications. Users can be confident that metadata added to, or read from images in Windows 7 will preserved when the image is used in, or created in an application that does not use WIC. The MWG guidelines specify metadata locations to read from and write to for common fields such as Keywords, Author, etc. Applications that use the &lt;A href="http://msdn.microsoft.com/en-us/library/aa968944(VS.85).aspx#metadatapolicy"&gt;&lt;FONT color=#0000ff&gt;Metadata Policy Layer&lt;/FONT&gt;&lt;/A&gt; in WIC for reading and writing metadata will be able to automatically take advantage of the increased metadata interoperation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;With the new features available in Windows 7 along with the ones already available since Vista, WIC is able to provide a compelling platform for working with images.&lt;EM&gt;&lt;FONT color=#4f81bd&gt;&lt;FONT face=Cambria&gt;&lt;o:p&gt;&amp;nbsp; &lt;/P&gt;
&lt;H4 style="MARGIN: 10pt 0in 0pt"&gt;
&lt;H4 style="MARGIN: 10pt 0in 0pt"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-STYLE: normal; COLOR: windowtext; FONT-SIZE: 13.5pt; FONT-WEIGHT: normal; mso-bidi-font-family: Arial; mso-fareast-font-family: 'MS Mincho'; mso-ascii-font-family: Cambria; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Cambria"&gt;&lt;STRONG&gt;Additional Information related to Imaging on Windows&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/EM&gt;&lt;/H4&gt;&lt;/H4&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;-&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ms737408(VS.85).aspx"&gt;&lt;FONT color=#0000ff&gt;WIC Overview&lt;/FONT&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;-&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="http://code.msdn.microsoft.com/win7wicsamples"&gt;&lt;FONT color=#0000ff&gt;WIC Samples&lt;/FONT&gt;&lt;/A&gt; (Progressive Decoding, Animated GIF, available here)&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;-&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd408863(VS.85).aspx"&gt;&lt;FONT color=#0000ff&gt;WIC Progressive Decoding Article&lt;/FONT&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;-&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/cc956175(VS.85).aspx"&gt;&lt;FONT color=#0000ff&gt;Creating a custom WIC CODEC&lt;/FONT&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;-&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="http://code.msdn.microsoft.com/wictools"&gt;&lt;FONT color=#0000ff&gt;WIC Explorer &amp;amp; WIC COP&lt;/FONT&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;-&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="http://channel9.msdn.com/posts/yochay/Windows-7-Graphics-WIC/"&gt;&lt;FONT color=#0000ff&gt;WIC Overview Video&lt;/FONT&gt;&lt;/A&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;-&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="http://support.microsoft.com/kb/971644"&gt;&lt;FONT color=#0000ff&gt;Platform Update for Windows Vista&lt;/FONT&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 10pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;-&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee220571.aspx"&gt;&lt;FONT color=#0000ff&gt;Device Stage – Windows 7 only&lt;/FONT&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9921659" width="1" height="1"&gt;</content><author><name>Varun Bhartia</name><uri>http://blogs.msdn.com/members/Varun+Bhartia.aspx</uri></author></entry><entry><title>Announcing the Direct2D Debug Layer</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/directx/archive/2009/10/30/announcing-the-direct2d-debug-layer.aspx" /><id>http://blogs.msdn.com/directx/archive/2009/10/30/announcing-the-direct2d-debug-layer.aspx</id><published>2009-10-30T21:02:00Z</published><updated>2009-10-30T21:02:00Z</updated><content type="html">&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Just like Direct3D 10, Direct2D was designed to fit hand in glove with an optional debug layer that allows developers to receive rich information about design-time issues they might encounter when using Direct2D. Today, the Direct2D team is happy to announce that the debug layer is available from code gallery. For more information, and to download the layer, please see &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd940309.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd940309.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;the debug layer entry in the SDK&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT size=4&gt;&lt;FONT face=Cambria&gt;About the Direct2D Debug Layer &lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/H2&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;The Direct2D debug layer is an independent component that will intercept calls made from the application to Direct2D and provide feedback about various classes of errors, for example:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Incorrect threading usage of Direct2D objects.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Using Direct2D objects with the wrong factory.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 10pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Incorrect parameters passed to Direct2D.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;In addition, the Direct2D debug layer also provides additional warnings and informational traces about issues that an application might optionally want to address, for example:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Using a software render target when a hardware render target might have been intended.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 10pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Using a more expensive primitive when a cheaper one would have worked.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT size=4&gt;&lt;FONT face=Cambria&gt;Using the Direct2D Debug Layer &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/H2&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;The Direct2D debug layer is designed not to change the behavior of Direct2D when it is used. If the debug layer is installed, it will not be invoked and will not result in any performance overhead unless the application explicitly requests that the debug layer be used. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;To trace all issues, specify the &lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;D2D1_DEBUG_LEVEL_INFORMATION&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; enumeration in the &lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;D2D1_FACTORY_OPTIONS&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; structure before calling &lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'"&gt;D2D1CreateFactory &lt;/SPAN&gt;&lt;FONT face=Calibri&gt;and run your application under a debugger.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;We hope that you find the debug layer useful. We are also very happy to receive feedback about any issues you encounter during application development where you feel that a debug layer trace would have been helpful so that we can continue to improve the debug layer.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9915471" width="1" height="1"&gt;</content><author><name>Mark Lawrence</name><uri>http://blogs.msdn.com/members/Mark+Lawrence.aspx</uri></author><category term="Graphics" scheme="http://blogs.msdn.com/directx/archive/tags/Graphics/default.aspx" /><category term="DirectX" scheme="http://blogs.msdn.com/directx/archive/tags/DirectX/default.aspx" /><category term="Direct2D" scheme="http://blogs.msdn.com/directx/archive/tags/Direct2D/default.aspx" /><category term="DirectWrite" scheme="http://blogs.msdn.com/directx/archive/tags/DirectWrite/default.aspx" /><category term="Debugging" scheme="http://blogs.msdn.com/directx/archive/tags/Debugging/default.aspx" /></entry><entry><title>Platform Update for Windows Vista Released!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/directx/archive/2009/10/27/platform-update-for-windows-vista-released.aspx" /><id>http://blogs.msdn.com/directx/archive/2009/10/27/platform-update-for-windows-vista-released.aspx</id><published>2009-10-27T22:57:00Z</published><updated>2009-10-27T22:57:00Z</updated><content type="html">The Platform Update for Windows Vista, which&amp;nbsp;is in mentioned in a&amp;nbsp;&lt;A title="Platform Update for Windows Vista Blog Post" href="http://blogs.msdn.com/directx/archive/2009/09/10/windows-7-transition-pack-for-windows-vista.aspx" mce_href="http://blogs.msdn.com/directx/archive/2009/09/10/windows-7-transition-pack-for-windows-vista.aspx"&gt;previous post&lt;/A&gt;, just had its final release! Find out more at the &lt;A title="Windows Team Blog" href="http://windowsteamblog.com/blogs/windows7/archive/2009/10/27/announcing-final-releases-of-platform-update-for-windows-vista-technologies.aspx" target=_blank mce_href="http://windowsteamblog.com/blogs/windows7/archive/2009/10/27/announcing-final-releases-of-platform-update-for-windows-vista-technologies.aspx"&gt;Windows Team Blog&lt;/A&gt;.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9913777" width="1" height="1"&gt;</content><author><name>moneppo</name><uri>http://blogs.msdn.com/members/moneppo.aspx</uri></author><category term="DX" scheme="http://blogs.msdn.com/directx/archive/tags/DX/default.aspx" /><category term="Graphics" scheme="http://blogs.msdn.com/directx/archive/tags/Graphics/default.aspx" /><category term="DirectX" scheme="http://blogs.msdn.com/directx/archive/tags/DirectX/default.aspx" /><category term="Direct2D" scheme="http://blogs.msdn.com/directx/archive/tags/Direct2D/default.aspx" /><category term="DirectWrite" scheme="http://blogs.msdn.com/directx/archive/tags/DirectWrite/default.aspx" /><category term="direct3d" scheme="http://blogs.msdn.com/directx/archive/tags/direct3d/default.aspx" /><category term="Windows Update" scheme="http://blogs.msdn.com/directx/archive/tags/Windows+Update/default.aspx" /></entry><entry><title>GPU Device Drivers - Driver Distribution</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/directx/archive/2009/10/22/Driver_5F00_Distribution.aspx" /><id>http://blogs.msdn.com/directx/archive/2009/10/22/Driver_5F00_Distribution.aspx</id><published>2009-10-22T13:00:00Z</published><updated>2009-10-22T13:00:00Z</updated><content type="html">&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;This post will give readers insight into the GPU device driver distribution process in the Windows PC Ecosystem. Four driver distribution channels are outlined: Inbox, &lt;/FONT&gt;&lt;A href="http://en.wikipedia.org/wiki/Independent_hardware_vendor" target=_blank mce_href="http://en.wikipedia.org/wiki/Independent_hardware_vendor"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;IHV&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;, &lt;/FONT&gt;&lt;A href="http://en.wikipedia.org/wiki/OEM" target=_blank mce_href="http://en.wikipedia.org/wiki/OEM"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;OEM&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;, and Windows Update (WU). Future posts in this series will discuss driver migration from Vista -&amp;gt; Windows 7, hardware support for the various &lt;/FONT&gt;&lt;A href="http://download.microsoft.com/download/5/E/6/5E66B27B-988B-4F50-AF3A-C2FF1E62180F/GRA-T518_WH08.pptx" target=_blank mce_href="http://download.microsoft.com/download/5/E/6/5E66B27B-988B-4F50-AF3A-C2FF1E62180F/GRA-T518_WH08.pptx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;WDDM&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; driver models and DirectX version levels, and how these differences affect DirectX developers.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt"&gt;&lt;FONT color=#000000 size=4 face=Cambria&gt;Why care about drivers?&lt;/FONT&gt;&lt;/H2&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Every device on a Windows PC has its own driver: Network, Audio, Storage, USB, GPU, etc. Many customers don’t know what a device driver is while others update their drivers each month to get improved performance, reliability,&amp;nbsp;and compatibility with the latest games and applications. We consider the entire spectrum of customers when supporting the Windows PC ecosystem. In order to coordinate Microsoft’s support strategy for these customers with our OEM and IHV partners, the Windows PC Ecosystem has four driver distribution channels which we’ll discuss below.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt"&gt;&lt;FONT color=#000000 size=4 face=Cambria&gt;Driver Distribution Channels&lt;/FONT&gt;&lt;/H2&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H3 style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt"&gt;&lt;FONT color=#000000 size=3 face=Cambria&gt;Inbox drivers&lt;/FONT&gt;&lt;/H3&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Microsoft provides GPU drivers on the Windows 7 retail DVD on behalf of our top GPU IHV partners (AMD/ATI, Intel, and Nvidia). These drivers provide baseline functionality for about 75% of the GPU marketplace so that customers can have an easy out-of-box setup experience. These drivers are designed and written by the IHV, but are integrated into Microsoft’s development and test engineering processes to ensure compatibility. In addition, the integration of these drivers into the Windows build actually accelerates the OS development process itself because it allows us to identify and resolve issues more efficiently. Some technologies such as OpenGL, CrossFire, SLI, and Hybrid/switchable graphics are absent from the Inbox driver. (For more information on why certain technologies lack Inbox support, please see the &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/whdc/device/display/GraphicsGuideWin7.mspx" target=_blank mce_href="http://www.microsoft.com/whdc/device/display/GraphicsGuideWin7.mspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Windows 7 Graphics Guide&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;.)&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;GPU devices that do not have Inbox drivers are covered by WU which we’ll discuss later. If no inbox or WU driver is available, Windows will load the &lt;I&gt;Standard VGA&lt;/I&gt; driver provided by Microsoft which implements the &lt;/FONT&gt;&lt;A href="http://en.wikipedia.org/wiki/VESA_BIOS_Extensions" target=_blank mce_href="http://en.wikipedia.org/wiki/VESA_BIOS_Extensions"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;VESA&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; standards. For most systems, this driver will deliver the common display resolutions on a single monitor, the Windows Basic theme without Aero, and limited power management support so the display is still usable. Below is a summary of GPU support available on the Windows 7 retail DVD.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;TABLE style="MARGIN: auto auto auto 1in; BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 5.4pt 0in 5.4pt" class=MsoTableDarkListAccent1 border=0 cellSpacing=0 cellPadding=0 class="MsoTableDarkListAccent1"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: -1; mso-yfti-firstrow: yes"&gt;
&lt;TD style="BORDER-BOTTOM: white 2.25pt solid; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; PADDING-LEFT: 5.4pt; WIDTH: 44.4pt; PADDING-RIGHT: 5.4pt; BACKGROUND: black; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 0in; mso-border-bottom-themecolor: background1; mso-background-themecolor: text1" vAlign=top width=59&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-yfti-cnfc: 5" class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;IHV&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: white 2.25pt solid; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; PADDING-LEFT: 5.4pt; WIDTH: 82.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: black; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 0in; mso-border-bottom-themecolor: background1; mso-background-themecolor: text1" vAlign=top width=110&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-yfti-cnfc: 1" class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Inbox Driver Version (INF)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: white 2.25pt solid; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; PADDING-LEFT: 5.4pt; WIDTH: 139.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: black; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 0in; mso-border-bottom-themecolor: background1; mso-background-themecolor: text1" vAlign=top width=186&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-yfti-cnfc: 1" class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Devices Supported&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: white 2.25pt solid; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; PADDING-LEFT: 5.4pt; WIDTH: 121.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: black; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 0in; mso-border-bottom-themecolor: background1; mso-background-themecolor: text1" vAlign=top width=162&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-yfti-cnfc: 1" class=MsoNormal&gt;&lt;B&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Desktop/Notebook&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 0"&gt;
&lt;TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; PADDING-LEFT: 5.4pt; WIDTH: 44.4pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #365f91; BORDER-TOP: #f0f0f0; BORDER-RIGHT: white 2.25pt solid; PADDING-TOP: 0in; mso-background-themecolor: accent1; mso-border-right-themecolor: background1; mso-background-themeshade: 191" vAlign=top width=59&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-yfti-cnfc: 68" class=MsoNormal&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;AMD&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; PADDING-LEFT: 5.4pt; WIDTH: 82.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #365f91; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 0in; mso-background-themecolor: accent1; mso-background-themeshade: 191" vAlign=top width=110&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-yfti-cnfc: 64" class=MsoNormal&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;8.56.1.0015&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; PADDING-LEFT: 5.4pt; WIDTH: 139.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #365f91; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 0in; mso-background-themecolor: accent1; mso-background-themeshade: 191" vAlign=top width=186&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-yfti-cnfc: 64" class=MsoNormal&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Radeon 9500 -&amp;gt; Radeon HD 4870&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-yfti-cnfc: 64" class=MsoNormal&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; PADDING-LEFT: 5.4pt; WIDTH: 121.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #365f91; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 0in; mso-background-themecolor: accent1; mso-background-themeshade: 191" vAlign=top width=162&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-yfti-cnfc: 64" class=MsoNormal&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Both&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1"&gt;
&lt;TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; PADDING-LEFT: 5.4pt; WIDTH: 44.4pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #365f91; BORDER-TOP: #f0f0f0; BORDER-RIGHT: white 2.25pt solid; PADDING-TOP: 0in; mso-background-themecolor: accent1; mso-border-right-themecolor: background1; mso-background-themeshade: 191" vAlign=top width=59&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-yfti-cnfc: 4" class=MsoNormal&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Intel&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; PADDING-LEFT: 5.4pt; WIDTH: 82.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #4f81bd; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 0in; mso-background-themecolor: accent1" vAlign=top width=110&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;8.15.10.1749&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; PADDING-LEFT: 5.4pt; WIDTH: 139.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #4f81bd; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 0in; mso-background-themecolor: accent1" vAlign=top width=186&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;GMA 950 -&amp;gt; GMA X4500&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; PADDING-LEFT: 5.4pt; WIDTH: 121.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #4f81bd; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 0in; mso-background-themecolor: accent1" vAlign=top width=162&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Both&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 2; mso-yfti-lastrow: yes"&gt;
&lt;TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; PADDING-LEFT: 5.4pt; WIDTH: 44.4pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #365f91; BORDER-TOP: #f0f0f0; BORDER-RIGHT: white 2.25pt solid; PADDING-TOP: 0in; mso-background-themecolor: accent1; mso-border-right-themecolor: background1; mso-background-themeshade: 191" vAlign=top width=59&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-yfti-cnfc: 68" class=MsoNormal&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Nvidia&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; PADDING-LEFT: 5.4pt; WIDTH: 82.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #365f91; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 0in; mso-background-themecolor: accent1; mso-background-themeshade: 191" vAlign=top width=110&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-yfti-cnfc: 64" class=MsoNormal&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;8.15.11.8593&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; PADDING-LEFT: 5.4pt; WIDTH: 139.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #365f91; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 0in; mso-background-themecolor: accent1; mso-background-themeshade: 191" vAlign=top width=186&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-yfti-cnfc: 64" class=MsoNormal&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;GeForce 6xxx -&amp;gt; 9xxx,&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-yfti-cnfc: 64" class=MsoNormal&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;GeForce GTX2xx,&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-yfti-cnfc: 64" class=MsoNormal&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Quadro (some)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; PADDING-LEFT: 5.4pt; WIDTH: 121.5pt; PADDING-RIGHT: 5.4pt; BACKGROUND: #365f91; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0; PADDING-TOP: 0in; mso-background-themecolor: accent1; mso-background-themeshade: 191" vAlign=top width=162&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-yfti-cnfc: 64" class=MsoNormal&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Desktop Only&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-yfti-cnfc: 64" class=MsoNormal&gt;&lt;SPAN style="COLOR: white; mso-themecolor: background1"&gt;&lt;FONT size=1 face=Calibri&gt;(*Notebook support provided by &lt;A href="http://www.nvidia.com/object/notebook_drivers.html" target=_blank mce_href="http://www.nvidia.com/object/notebook_drivers.html"&gt;Verde&lt;/A&gt; program)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H3 style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt"&gt;&lt;FONT color=#000000 size=3 face=Cambria&gt;IHV drivers&lt;/FONT&gt;&lt;/H3&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The Inbox drivers provide a good baseline, but IHV’s continue to innovate and improve their products through new hardware releases and driver updates. IHV drivers may be downloaded directly from vendor websites such as &lt;/FONT&gt;&lt;A href="http://www.amd.com/" target=_blank mce_href="http://www.amd.com/"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;www.amd.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;, &lt;/FONT&gt;&lt;A href="http://www.intel.com/" target=_blank mce_href="http://www.intel.com/"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;www.intel.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;, &lt;/FONT&gt;&lt;A href="http://www.nvidia.com/" target=_blank mce_href="http://www.nvidia.com/"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;www.nvidia.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;, or loaded from a disc included in a retail package. Compared to Inbox drivers, IHV-supplied drivers are updated on a regular basis and tend to have more bug fixes, performance tweaks, and extra features such as OpenGL, CrossFire, SLI, and advanced control panel applets. Windows PC enthusiasts and hardcore gamers download the latest IHV drivers to get the best performance and compatibility with games and graphics intensive applications. For example, &lt;/FONT&gt;&lt;A href="http://www2.ati.com/relnotes/Catalyst_99_release_notes.pdf" target=_blank mce_href="http://www2.ati.com/relnotes/Catalyst_99_release_notes.pdf"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;ATI&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;, &lt;/FONT&gt;&lt;A href="http://downloadmirror.intel.com/18248/eng/relnotes_win7_gfx.htm" target=_blank mce_href="http://downloadmirror.intel.com/18248/eng/relnotes_win7_gfx.htm"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Intel&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;, and &lt;/FONT&gt;&lt;A href="http://www.nvidia.com/object/win7_winvista_32bit_191.07_whql.html" target=_blank mce_href="http://www.nvidia.com/object/win7_winvista_32bit_191.07_whql.html"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Nvidia&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; all list compatibility bug fixes and performance improvements in their latest driver release notes. Most driver updates are not necessary for most customers. But for major reliability fixes which eliminate blue screen errors or &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/whdc/device/display/wddm_timeout.mspx" target=_blank mce_href="http://www.microsoft.com/whdc/device/display/wddm_timeout.mspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;TDR hangs&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;, IHV’s can post their drivers on WU as optional downloads and can request they be offered to&amp;nbsp;customers as important updates, when applicable. This delivery mechanism allows the driver to get into the hands of many more customers as we’ll explain later.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3 style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt"&gt;&lt;FONT color=#000000 size=3 face=Cambria&gt;OEM drivers&lt;/FONT&gt;&lt;/H3&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;OEMs such as HP and Dell typically include customized GPU drivers on their systems which are tested exclusively with the particular hardware platform. These drivers are pre-loaded on the hard drive of shipping systems but can also be downloaded from OEM support websites. Laptop drivers typically have dozens of customizations specific to the hardware feature set and a driver INF file which associates the driver package with the exact &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/whdc/system/pnppwr/pnp/pnpid.mspx" target=_blank mce_href="http://www.microsoft.com/whdc/system/pnppwr/pnp/pnpid.mspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;PNPID&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; of the hardware device.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The PNPID-level customization allows more control over driver distribution. For example, if a customized OEM driver is installed, WU will not offer end-users a generic or IHV-supplied WU driver unless it is specifically targeted for the user's system by the OEM. This scheme gives OEMs more end-to-end control over their products and streamlines product support by reducing the variability in the driver versions that can be installed. This reduced variability helps the OEM maintain a reliable and consistent experience for their customers. But there is a tradeoff: IHV’s continue to innovate with regular driver updates, but many OEM customers are not able to get those updates since the OEM won’t necessarily post them right away.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3 style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt"&gt;&lt;FONT color=#000000 size=3 face=Cambria&gt;WU drivers&lt;/FONT&gt;&lt;/H3&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;WU drivers provide baseline support for GPU devices which do not have Inbox drivers.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If a customer is using the default Standard VGA driver after OS install or after installing a new video card, the WU client will automatically check the WU servers to see if a better driver is available for download. Depending on which WU options have been previously set on the machine, the driver may download and install automatically, or the customer may be prompted to accept the download. As new devices are released to market, IHVs and OEMs will continue to post drivers&amp;nbsp;on their own support web sites and WU.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;WU also provides a mechanism to widely distribute fixes for customer issues with previously installed drivers. End-users may not know about IHV or OEM websites or may not have the technical expertise or confidence to manually install drivers. So Microsoft works closely with OEM and IHV partners to address known issues and deliver updates automatically via WU. When a partner has a new driver update ready, they can post the driver as an optional download on WU. After several days of customer downloads, Microsoft analyzes reliability trends using opt-in customer feedback tools such as &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/whdc/winlogo/maintain/StartWER.mspx" target=_blank mce_href="http://www.microsoft.com/whdc/winlogo/maintain/StartWER.mspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Windows Error Reporting&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;. In fact, the use of these tools enables Microsoft to track reliability on all drivers regardless of the distribution channel. The data is analyzed and aggregated so noteworthy trends can be shared with IHV and OEM partners allowing them to target fixes more effectively. Based on this deep analysis, Microsoft&amp;nbsp;may promote &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/windows/downloads/windowsupdate/updatelevels.mspx" target=_blank mce_href="http://www.microsoft.com/windows/downloads/windowsupdate/updatelevels.mspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;optional driver downloads to important downloads&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; so that more customers get the fixes automatically.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt"&gt;&lt;FONT color=#000000 size=4 face=Cambria&gt;Conclusion&lt;/FONT&gt;&lt;/H2&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;We hope this post sheds some light on the driver distribution process for the Windows PC Ecosystem. Stay tuned for follow-up posts describing driver migration from Vista -&amp;gt; Windows 7, hardware support for the various &lt;/FONT&gt;&lt;A href="http://download.microsoft.com/download/5/E/6/5E66B27B-988B-4F50-AF3A-C2FF1E62180F/GRA-T518_WH08.pptx" target=_blank mce_href="http://download.microsoft.com/download/5/E/6/5E66B27B-988B-4F50-AF3A-C2FF1E62180F/GRA-T518_WH08.pptx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;WDDM&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; driver models and the DirectX version levels. In the meantime you can look at the &lt;I style="mso-bidi-font-style: normal"&gt;cardcaps.pdf&lt;/I&gt; document included in the latest &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=b66e14b8-8505-4b17-bf80-edb2df5abad4&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=b66e14b8-8505-4b17-bf80-edb2df5abad4&amp;amp;displaylang=en"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;DirectX SDK&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; for a breakout of DirectX capabilities vs. GPU device.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9911504" width="1" height="1"&gt;</content><author><name>danchar</name><uri>http://blogs.msdn.com/members/danchar.aspx</uri></author><category term="Windows Update" scheme="http://blogs.msdn.com/directx/archive/tags/Windows+Update/default.aspx" /><category term="OEM" scheme="http://blogs.msdn.com/directx/archive/tags/OEM/default.aspx" /><category term="IHV" scheme="http://blogs.msdn.com/directx/archive/tags/IHV/default.aspx" /><category term="Nvidia" scheme="http://blogs.msdn.com/directx/archive/tags/Nvidia/default.aspx" /><category term="Intel" scheme="http://blogs.msdn.com/directx/archive/tags/Intel/default.aspx" /><category term="GPU" scheme="http://blogs.msdn.com/directx/archive/tags/GPU/default.aspx" /><category term="AMD" scheme="http://blogs.msdn.com/directx/archive/tags/AMD/default.aspx" /><category term="Drivers" scheme="http://blogs.msdn.com/directx/archive/tags/Drivers/default.aspx" /><category term="ATI" scheme="http://blogs.msdn.com/directx/archive/tags/ATI/default.aspx" /><category term="WDDM" scheme="http://blogs.msdn.com/directx/archive/tags/WDDM/default.aspx" /></entry><entry><title>New DirectX MSDN Developer Center</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/directx/archive/2009/10/19/new-directx-msdn-developer-center.aspx" /><id>http://blogs.msdn.com/directx/archive/2009/10/19/new-directx-msdn-developer-center.aspx</id><published>2009-10-19T13:00:00Z</published><updated>2009-10-19T13:00:00Z</updated><content type="html">&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Today I am pleased to announce the new &lt;/FONT&gt;&lt;FONT size=3 face=Calibri&gt;&lt;A title="DirectX MSDN Developer Center" href="http://msdn.microsoft.com/directx" target=_blank mce_href="http://msdn.microsoft.com/directx"&gt;DirectX MSDN Developer Center&lt;/A&gt;. This new site is a complete overhaul of the developer center to make it easier for developers to find the content they are looking for. Using this new site, we hope to provide the best developer content for developers making great graphics applications on a regular basis.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Right from the front page you’ll see the new design pushes the important content right to the front, including downloads, FAQs, documentation, and of course this blog &lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: Wingdings"&gt;J&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; One major change with the site is that the majority of content is now provided through RSS feeds, so if you want to get the latest and greatest downloads or code samples the moment they’re available, you can easily subscribe to any feed by clicking the orange RSS button &lt;/FONT&gt;&lt;/FONT&gt;&lt;IMG style="WIDTH: 16px; HEIGHT: 16px" title="RSS Button" alt="RSS Button" src="http://i.msdn.microsoft.com/dd183105.rss_button(en-us,MSDN.10).gif" width=16 height=16 mce_src="http://i.msdn.microsoft.com/dd183105.rss_button(en-us,MSDN.10).gif"&gt;&lt;FONT size=3 face=Calibri&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;We know that code samples are an important way for developers to learn the ins and outs of our technologies, so we are working to simplify the way developers can get the code samples for DirectX. To this end, many of our important code samples have been made available on &lt;/FONT&gt;&lt;FONT size=3 face=Calibri&gt;&lt;A title="Microsoft Code Gallery" href="http://code.msdn.microsoft.com/" target=_blank mce_href="http://code.msdn.microsoft.com/"&gt;Code Gallery&lt;/A&gt; for direct download. In addition, we have a showcase of the latest DirectX tutorials right on the front page.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;As always, the Developer Center will provide easy access to all of our &lt;/FONT&gt;&lt;FONT size=3 face=Calibri&gt;&lt;A title="DirectX Documentation" href="http://msdn.microsoft.com/en-us/library/aa139795.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/aa139795.aspx"&gt;documentation&lt;/A&gt;. We are constantly looking for ways to improve your experience using this documentation in your development of applications, so please let us know if you have any feedback.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Thanks for reading, and I encourage you to check out &lt;/FONT&gt;&lt;FONT size=3 face=Calibri&gt;&lt;A title="DirectX MSDN Developer Center" href="http://msdn.microsoft.com/directx" target=_blank mce_href="http://msdn.microsoft.com/directx"&gt;the new site&lt;/A&gt;! Stay tuned, as we have even more underway to improve the way you access developer resources for DirectX, including forum improvements and new content!&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Michael Oneppo&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;PM, DirectX&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9909385" width="1" height="1"&gt;</content><author><name>moneppo</name><uri>http://blogs.msdn.com/members/moneppo.aspx</uri></author><category term="DirectX" scheme="http://blogs.msdn.com/directx/archive/tags/DirectX/default.aspx" /><category term="Direct2D" scheme="http://blogs.msdn.com/directx/archive/tags/Direct2D/default.aspx" /><category term="DirectWrite" scheme="http://blogs.msdn.com/directx/archive/tags/DirectWrite/default.aspx" /><category term="msdn" scheme="http://blogs.msdn.com/directx/archive/tags/msdn/default.aspx" /><category term="direct3d" scheme="http://blogs.msdn.com/directx/archive/tags/direct3d/default.aspx" /></entry><entry><title>Comparing Direct2D and GDI</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/directx/archive/2009/09/29/comparing-direct2d-and-gdi.aspx" /><id>http://blogs.msdn.com/directx/archive/2009/09/29/comparing-direct2d-and-gdi.aspx</id><published>2009-09-29T07:17:00Z</published><updated>2009-09-29T07:17:00Z</updated><content type="html">&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Direct2D and GDI are both immediate mode 2D rendering APIs and both offer some degree of hardware acceleration. This tends to cause some confusion – Why are these APIs different? How are they similar? Does Direct2D make GDI faster? How is Direct2D hardware acceleration different to GDI hardware acceleration? The goal of this post is to provide some insights into the differences between Direct2D and GDI.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;IMG style="WIDTH: 532px; HEIGHT: 474px" title="Direct2D compared to GDI" alt="Direct2D compared to GDI" align=middle src="http://blogs.msdn.com/photos/directx/images/9897719/original.aspx" width=395 height=371 mce_src="http://blogs.msdn.com/photos/directx/images/9897719/original.aspx"&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: center; MARGIN: 0in 0in 10pt" class=MsoNormal align=center&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /&gt;&lt;v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"&gt;&lt;/v:path&gt;&lt;o:lock aspectratio="t" v:ext="edit"&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;v:shape style="WIDTH: 4in; HEIGHT: 274.5pt" id=_x0000_i1025 o:ole="" type="#_x0000_t75"&gt;&lt;v:imagedata o:title="" src="file:///C:\Users\mlawrenc\AppData\Local\Temp\msohtmlclip1\01\clip_image001.emz"&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoCaption&gt;&lt;A name=_Ref239222957&gt;&lt;/A&gt;&lt;STRONG&gt;&lt;FONT color=#4f81bd face=Calibri&gt;Figure &lt;/FONT&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;FONT color=#4f81bd&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-bookmark: _Ref239222957"&gt;&lt;SPAN style="mso-no-proof: yes"&gt;1&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-bookmark: _Ref239222957"&gt;&lt;/SPAN&gt; - Direct2D compared to GDI&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT color=#4f81bd size=4 face=Cambria&gt;How are Direct2D and GDI different?&lt;/FONT&gt;&lt;/H2&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Direct2D and GDI are different in the details of what each API renders and how it goes about driving the display hardware. They are also somewhat different in their underlying design principles.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;GDI renders opaque, aliased geometry (paths, lines, etc). It renders aliased and ClearType text, and can support transparency blending through the AlphaBlend API. However, its handling of transparency is inconsistent. Most APIs simply ignore the alpha channel, some use it. Very few APIs guarantee what the alpha channel will contain after an operation. Perhaps more importantly, GDI’s rendering doesn’t map easily to what a modern GPU renders most efficiently on the 3D portion of its rendering engine. For example, ROPs can’t be implemented by the blend stage of a GPU. However, alpha can. (ROPs can be implemented by copying between render targets and using look up tables or bitwise operations in the pixel shader. However, this is still slower than using the blender stage of the hardware).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;As another example, Direct2D’s aliased lines are designed to be implemented simply as two triangles rendered on the GPU. GDI guarantees that Bresenham’s line drawing algorithm is used.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Direct2D renders opaque, transparent, aliased and anti-aliased primitives. It has strict guarantees on how it both accepts and renders transparent content. This makes designing a modern UI with Direct2D easier and, it also allows Direct2D to render all of its primitives using hardware acceleration. Direct2D is not a pure superset of GDI – primitives that would have been unreasonably slow to implement on a GPU aren’t present in Direct2D. This should at least answer one question - Direct2D doesn’t help improve the performance of GDI, since GDI doesn’t use Direct2D. Neither does Direct2D use GDI. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;How Direct2D and GDI differ in terms of architectural layering is shown in Figure &lt;SPAN style="mso-no-proof: yes"&gt;1&lt;/SPAN&gt;. Direct2D uses Direct3D to obtain hardware acceleration. Direct3D in turn uses a user-mode display driver which packages up command streams. Direct3D sends these command streams and resources down into kernel mode for the hardware to process. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;One large advantage of this architecture is the ease with which an application can use both Direct2D and Direct3D together.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Since Windows NT 4, GDI has run in kernel mode. The application calls GDI which then calls its kernel mode counterpart. There, GDI passes the primitives to its own driver model. This driver then sends the results to the global kernel mode display driver. Since around Windows 2000, GDI and the GDI drivers have run in an independent space in the kernel called “session space.” A session address space is created for each logon session and each instance of GDI runs independently in this distinct kernel mode address space.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT color=#4f81bd size=4 face=Cambria&gt;How are GDI and Direct2D Hardware acceleration different?&lt;/FONT&gt;&lt;/H2&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The most important difference between Direct2D and GDI hardware acceleration is that Direct2D is layered on top Direct3D, while GDI has its own independent notion of a driver model. This driver model (the GDI Device Driver Interface or DDI) corresponds to the GDI primitives, while the Direct3D driver model corresponds to what the 3D rendering hardware in a GPU renders. When the GDI DDI was first defined in the early 90’s most display acceleration hardware targeted these GDI primitives. Over time, however, more and more emphasis was placed on 3D game acceleration and less on application acceleration. As a consequence more of the GDI DDI wasn’t implemented by the display driver and in the end, BitBlt was accelerated and most other operations were not.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;This set the stage for a sequence of changes to how GDI renders to the display. The sequence is shown in Figure &lt;SPAN style="mso-no-proof: yes"&gt;2&lt;/SPAN&gt;. There were also a number of additional factors that caused changes to the GDI driver model.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;U&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Increasing complexity and size of display drivers&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Over time display drivers became more complex due largely to the increasing complexity of the 3D portion of the driver. Higher complexity code tends to exhibit more defects; hence it was desirable to move the driver to user-mode where a driver bug wouldn’t cause a reboot. As can be seen in the figure, the display driver has been divided into a complex user mode component and a simpler kernel mode component.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;IMG style="WIDTH: 726px; HEIGHT: 310px" title="GDI evolution" alt="GDI evolution" align=middle src="http://blogs.msdn.com/photos/directx/images/9897802/original.aspx" width=625 height=254 mce_src="http://blogs.msdn.com/photos/directx/images/9897802/original.aspx"&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;v:shape style="WIDTH: 467.25pt; HEIGHT: 189pt" id=_x0000_i1026 o:ole="" type="#_x0000_t75"&gt;&lt;v:imagedata o:title="" src="file:///C:\Users\mlawrenc\AppData\Local\Temp\msohtmlclip1\01\clip_image002.emz"&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoCaption&gt;&lt;A name=_Ref239257106&gt;&lt;/A&gt;&lt;STRONG&gt;&lt;FONT color=#4f81bd face=Calibri&gt;Figure &lt;/FONT&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;FONT color=#4f81bd&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-bookmark: _Ref239257106"&gt;&lt;SPAN style="mso-no-proof: yes"&gt;2&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-bookmark: _Ref239257106"&gt;&lt;/SPAN&gt; - Evolution of GDI display rendering&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;U&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Difficulty in synchronizing session and global kernel address spaces&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;In Windows XP a display driver exists in two different address spaces, session space and kernel space. Some parts of the driver need to respond to plug ‘n play and power management events. This state needs to be synchronized with the driver state in the session address space. This is a difficult task and display drivers tended to exhibit defects when attempting to deal with these distinct address spaces.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;U&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;The composited desktop&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The composited desktop required GDI to be able to render to a surface which was then rendered by Direct3D to display. This couldn’t be done easily in the XP driver model since GDI and Direct3D were parallel driver stacks. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;As a result, in Windows Vista, the GDI DDI display driver was changed to be only implemented by a Microsoft supplied driver, the Canonical Display Driver (CDD). GDI rendered to a system memory bitmap. Dirty regions were used to update the video memory texture which the window manager uses to composite the desktop. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT color=#4f81bd size=4 face=Cambria&gt;GDI rendering in Windows 7&lt;/FONT&gt;&lt;/H2&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The chief disadvantage of the windows vista driver model was that every GDI window must be backed by both a video memory surface and a system memory surface. This results in system memory being used for each open GDI window.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;For this reason GDI was changed again in Windows 7 to ensure that it does not require a system memory surface per window. Since GDI rendering requires it to read, modify and write the system memory surface, and since the CPU cannot directly access video memory, GDI was modified to render to and from a piece of aperture memory. The aperture memory can be updated from the video memory surface holding the window contents. GDI can render back to the aperture memory, and the result can then be sent back to the window surface. Since the aperture memory segment is addressable by the GPU, the GPU can accelerate these updates to the video memory surface. For example: text rendering, BitBlt with common ROPs, AlphaBlend, TransparentBlt, StretchBlt are all accelerated in these cases. In addition, some operations can bypass the aperture memory segment entirely, such as window BitBlt and ColorFill. &lt;/FONT&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT color=#4f81bd size=4 face=Cambria&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/H2&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT color=#4f81bd size=4 face=Cambria&gt;Contrasting Direct2D and GDI acceleration in Windows 7&lt;/FONT&gt;&lt;/H2&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Direct2D and GDI are both 2D Immediate-mode rendering APIs and both can be described as hardware accelerated. However, there are a number of differences that remain in both APIs.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;U&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Location of resources&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;GDI maintains its resources, in particular bitmaps, in system memory by default. Direct2D maintains its resources in video memory on the display adapter. As a result, when GDI needs to update video memory, this must always be done over the bus, unless the resource happens to already be copied into the aperture memory segment, or if the operation can be expressed directly. One exception to this is bitmaps created with the CreateBitmapFromDxSurface API which are resident in video memory. In contract, Direct2D can simply translate its primitives to Direct3D primitives because the resources are already in video memory. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;U&gt;Method of rendering&lt;/U&gt;&lt;/B&gt;&lt;U&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/U&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;In order to maintain compatibility GDI performs a large part of its rendering to aperture memory using the CPU. In contrast, Direct2D is a translator that translates its APIs calls into Direct3D primitives. The result is then rendered on the GPU. Some of GDI’s rendering is performed on the GPU when the aperture memory is copied to the video memory surface representing the GDI window, or when it is otherwise possible.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;SPAN style="TEXT-DECORATION: none"&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;U&gt;&lt;FONT size=3 face=Calibri&gt;Scalability&lt;/FONT&gt;&lt;/U&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Direct2D’s rendering calls are all independent command streams to the GPU. Each Direct2D factory represents a different Direct3D device. In contract, GDI uses one command stream for all of the applications on the system. GDI’s method can result in some amortization of GPU and CPU rendering context overhead. Direct2D’s approach has little unnecessary serialization between independent command streams.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;U&gt;&lt;FONT size=3 face=Calibri&gt;Location&lt;/FONT&gt;&lt;/U&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Of course, Direct2D is entirely in user mode, including the Direct3D run time and the user mode Direct3D driver. GDI, in contrast, has most of its functionality in session space in kernel mode, with its API surface in user mode.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;U&gt;&lt;FONT size=3 face=Calibri&gt;Availability of Hardware Acceleration&lt;/FONT&gt;&lt;/U&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;GDI is hardware accelerated on Windows XP, and on Windows 7 when the DWM is running and when a WDDM 1.1 driver is in use. Direct2D is hardware accelerated on any almost any WDDM driver and regardless of whether DWM is in use. There are announced plans to port Direct2D to Windows Vista. Here it will also be hardware accelerated on almost any WDDM driver. On Vista, GDI will always render on the CPU.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;U&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Presentation Model&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;When Windows was first designed, there was insufficient memory to allow every window to be stored in its own bitmap. As a result, GDI always rendered logically directly to the screen, with various clipping regions applied to ensure that it did not render outside of its window. In contract, Direct2D follows a model where the application renders to a back-buffer and the result is atomically “flipped” when the application is done drawing. This allows Direct2D to handle animation scenarios much more fluidly that GDI can.&lt;U&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/U&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt; tab-stops: 289.65pt" class=MsoNormal&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT color=#4f81bd size=4 face=Cambria&gt;Conclusion&lt;/FONT&gt;&lt;/H2&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;We hope this post gives you some insights on how GDI and Direct2D work.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;If you have existing GDI code, that will continue to work well under Windows 7.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;But if you are writing new graphics rendering code, you should consider using Direct2D to leverage modern GPUs better.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;For more information on interoperability between Direct2D and GDI see the following:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpFirst&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="http://blogs.msdn.com/directx/archive/2009/08/26/directx-componentization-and-interoperability.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;A previous blog post on Direct2D interoperation&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -0.25in; MARGIN: 0in 0in 10pt 0.5in; mso-list: l0 level1 lfo1" class=MsoListParagraphCxSpLast&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd370971.aspx"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;The SDK article on Direct2D and GDI interoperation&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9900590" width="1" height="1"&gt;</content><author><name>Mark Lawrence</name><uri>http://blogs.msdn.com/members/Mark+Lawrence.aspx</uri></author><category term="DX" scheme="http://blogs.msdn.com/directx/archive/tags/DX/default.aspx" /><category term="Graphics" scheme="http://blogs.msdn.com/directx/archive/tags/Graphics/default.aspx" /><category term="DirectX" scheme="http://blogs.msdn.com/directx/archive/tags/DirectX/default.aspx" /><category term="GDI+" scheme="http://blogs.msdn.com/directx/archive/tags/GDI_2B00_/default.aspx" /><category term="GDI" scheme="http://blogs.msdn.com/directx/archive/tags/GDI/default.aspx" /><category term="Direct2D" scheme="http://blogs.msdn.com/directx/archive/tags/Direct2D/default.aspx" /><category term="DirectWrite" scheme="http://blogs.msdn.com/directx/archive/tags/DirectWrite/default.aspx" /></entry><entry><title>D3D9d.dll from March 2009 DirectX SDK mismatch with Windows 7 RTM</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/directx/archive/2009/09/14/d3d9d-dll-from-march-2009-directx-sdk-mismatch-with-windows-7-rtm.aspx" /><id>http://blogs.msdn.com/directx/archive/2009/09/14/d3d9d-dll-from-march-2009-directx-sdk-mismatch-with-windows-7-rtm.aspx</id><published>2009-09-14T21:01:00Z</published><updated>2009-09-14T21:01:00Z</updated><content type="html">&lt;P style="MARGIN: 0in 0in 0pt" class=MsoListParagraph&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'"&gt;If developers are using the debug version of D3D9 runtime d3d9d.dll from March 2009 DirectX SDK, they may notice compilation or runtime errors when developing on Windows 7 RTM.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoListParagraph&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT size=3&gt;There is a binary mismatch between d3d9d.dll from March 2009 DirectX SDK and Windows 7.&amp;nbsp; To workaround, developers should be using the latest &lt;/FONT&gt;&lt;A title="August 2009 DirectX SDK" href="http://msdn.microsoft.com/directx/sdk/" target=_blank mce_href="http://msdn.microsoft.com/directx/sdk/"&gt;&lt;FONT color=#0000ff size=3&gt;August 2009 DirectX SDK&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9895134" width="1" height="1"&gt;</content><author><name>maryluo</name><uri>http://blogs.msdn.com/members/maryluo.aspx</uri></author><category term="DX" scheme="http://blogs.msdn.com/directx/archive/tags/DX/default.aspx" /><category term="DirectX" scheme="http://blogs.msdn.com/directx/archive/tags/DirectX/default.aspx" /></entry><entry><title>Using Direct2D for Server-Side Rendering</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/directx/archive/2009/09/11/using-direct2d-for-server-side-rendering.aspx" /><id>http://blogs.msdn.com/directx/archive/2009/09/11/using-direct2d-for-server-side-rendering.aspx</id><published>2009-09-11T20:16:00Z</published><updated>2009-09-11T20:16:00Z</updated><content type="html">Some server applications need to render for scenarios like charting and sending back the generated bitmaps to users connected through web clients. During the planning of Direct2D, we decided to put the support of this scenario as one of our design goals. &lt;BR&gt;&lt;BR&gt;&lt;B&gt;Requirements of server-side rendering&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;There are several specific requirements for this scenario. First, usually the process is going to be run in Session 0 for security reason. Session 0 is dedicated for system processes and services, and isolated from user applications. It has higher privilege in some aspects but no privilege in interactive features (details &lt;A href="http://www.microsoft.com/whdc/system/vista/services.mspx" target=_blank mce_href="http://www.microsoft.com/whdc/system/vista/services.mspx"&gt;here&lt;/A&gt;). Second, most servers only have low-end graphics cards, or there may even be no graphics cards inside, thus the availability of hardware acceleration cannot be expected. Third, the application should be able to handle multiple concurrent requests efficiently on a multi-core machine.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;Options of available APIs&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;There are three native 2D rendering APIs that applications can use in Windows Server 2008 R2: GDI, GDI+ and the new Direct2D. I will go through each of them and talk about whether they fit with this scenario. 
&lt;OL&gt;
&lt;LI&gt;&lt;B&gt;GDI&lt;/B&gt;&lt;BR&gt;GDI does not support high-quality drawing. It lacks the support of anti-aliasing, which makes sloped lines jaggy. Moreover, it does not have full support for transparency, such as the support of semi-transparent brushes and pens.&lt;BR&gt;&lt;BR&gt;GDI was not designed for parallel processing and suffers from an inefficient global lock. Windows 7 and Windows Server 2008 R2 have redesigned this lock to be more granular (details &lt;A href="http://blogs.msdn.com/e7/archive/2009/04/25/engineering-windows-7-for-graphics-performance.aspx" target=_blank mce_href="http://blogs.msdn.com/e7/archive/2009/04/25/engineering-windows-7-for-graphics-performance.aspx"&gt;here&lt;/A&gt;), but based on our test results, D2D still scales better.&lt;BR&gt;&lt;BR&gt;Another problem is that the total number of GDI handles is limited to 10240 per process and 65536 per session, because internally Windows uses a 16-bit WORD to store the index of them for each session. Stock objects are excluded from this limitation. Spawning new sessions is one way to overcome the limit, but it increases the memory usage.&lt;BR&gt;&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;GDI+&lt;/B&gt;&lt;BR&gt;The main problem with GDI+ for server scenarios is that it does not officially support running in Session 0. Functions that try to interact with the display device will receive errors because it is not allowed in Session 0. Other functions may also fail because even if the function doesn’t seem related to the display device, it may use some paths underneath that are forbidden.&lt;BR&gt;&lt;BR&gt;GDI+ supports anti-aliasing and alpha-blending, thus it doesn’t have the quality issue of GDI. However, there is also a performance issue due to the locking mechanism, and no work in Windows 7 or Windows Server 2008 R2 has been done to improve it in GDI+.&lt;BR&gt;&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;Direct2D&lt;/B&gt;&lt;BR&gt;D2D was designed with multi-threading and Session 0 in mind from the very beginning. In most multi-threaded cases, D2D can be lock-free by using multiple single-threaded factories, one for each thread. There will be a factory-wide lock if the application has to use the multi-threaded mode of the factory, but it is more granular than those in GDI and GDI+. The impact of this lock is negligible and won’t grow exponentially when the number of threads increases.&lt;/LI&gt;&lt;/OL&gt;&lt;B&gt;How to use Direct2D for server-side rendering&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;A typical server application for this scenario will generate pictures inside the memory using D2D software rendering using multiple threads where each thread draws one picture. 
&lt;OL&gt;
&lt;LI&gt;&lt;B&gt;Software rendering&lt;/B&gt;&lt;BR&gt;To use D2D on a server without hardware acceleration, the key step is to use the software rasterizer by creating a WIC bitmap render target with D2D1_RENDER_TARGET_TYPE_SOFTWARE or D2D1_RENDER_TARGET_TYPE_DEFAULT. The default property will also use software rendering because WIC bitmap render target does not support hardware rendering.&lt;BR&gt;&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;Multi-threading&lt;/B&gt;&lt;BR&gt;Usually a multi-threaded architecture is good for server rendering. Take a banking application that generates charts for example. The typical case is that there will be many users connected to the server at the same time, and the charts they are asking for can be generated independently. When running on a multi-core server machine, it would be very efficient to create multiple rendering threads and put one charting task to each thread, so that the OS can fully utilize the CPU cores to run rendering tasks in parallel. &lt;BR&gt;&lt;BR&gt;One concern about the design of multi-threaded architecture for D2D is how to create and share factories and render targets across threads. The following figures show three different potential approaches.&lt;BR&gt;&lt;BR&gt;&lt;IMG style="WIDTH: 762px; HEIGHT: 194px" title="Figure 1" alt="Figure 1" src="http://blogs.msdn.com/photos/directx/images/9893218/original.aspx" width=762 height=194 mce_src="http://blogs.msdn.com/photos/directx/images/9893218/original.aspx"&gt;&lt;BR&gt;&lt;IMG style="WIDTH: 762px; HEIGHT: 192px" title="Figure 2" alt="Figure 2" src="http://blogs.msdn.com/photos/directx/images/9893219/original.aspx" width=762 height=192 mce_src="http://blogs.msdn.com/photos/directx/images/9893219/original.aspx"&gt;&lt;BR&gt;&lt;IMG style="WIDTH: 762px; HEIGHT: 193px" title="Figure 3" alt="Figure 3" src="http://blogs.msdn.com/photos/directx/images/9893220/original.aspx" width=762 height=193 mce_src="http://blogs.msdn.com/photos/directx/images/9893220/original.aspx"&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;Figure 1 shows different threads sharing the same factory and render target. This architecture is dangerous even if the factory uses multi-threaded mode. The internal lock does not prevent situations like overlapping BeginDraw() and EndDraw() to the same render target, as depicted in the picture. The BeginDraw() in thread 1 will fail because the render target is being used for the drawing of thread 2. We do not support this architecture since it’s unpredictable when multiple threads are changing the state of the same render target simultaneously, e.g. setting the transformation matrix.&lt;BR&gt;&lt;BR&gt;Figure 2 works but only has the same performance as single thread. The D2D locking in multi-threaded mode factory is in function level and all the D2D calls in the same factory will be serialized. As a result, if thread 1 tries to enter a D2D function while thread 2 is in the middle of executing another function, thread 1 will be blocked till thread 2 finishes.&lt;BR&gt;&lt;BR&gt;Figure 3 is what we suggest for server-side rendering. A separate factory is created for each thread. The factory can be put in single-threaded mode if it’s only going to be accessed from within the thread. D2D functions in different threads are lock-free and can run in parallel. The cost of having multiple factories is much less than creating multiple D3D devices, just about 60k each for the memory.&lt;BR&gt;&lt;BR&gt;Although Figure 3 has the best concurrency, you may consider Figure 2 for the benefit of sharing D2D resources that are created from the same factory. &lt;BR&gt;&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;Generate an image file&lt;/B&gt;&lt;BR&gt;Here are the main steps to generate an image file: &lt;BR&gt;&lt;BR&gt;
&lt;OL&gt;
&lt;LI&gt;Create an IWICBitmap,&lt;/LI&gt;
&lt;LI&gt;Pass the bitmap to CreateWicBitmapRenderTarget(),&lt;/LI&gt;
&lt;LI&gt;BeginDraw(),&lt;/LI&gt;
&lt;LI&gt;Use ID2D1RenderTarget::Clear() to clear the background. To have a transparent background in the output picture, use a color with 0 in the alpha channel for this function.&lt;/LI&gt;
&lt;LI&gt;Draw to the render target,&lt;/LI&gt;
&lt;LI&gt;EndDraw(),&lt;/LI&gt;
&lt;LI&gt;Set up an IWICStream that either writes to a file (InitializeFromFilename) or writes inside the memory (InitializeFromMemory),&lt;/LI&gt;
&lt;LI&gt;Use IWICBitmapFrameEncode to encode the bitmap into the picture format you want.&lt;/LI&gt;&lt;/OL&gt;&lt;BR&gt;For a detailed example see the &lt;A href="http://msdn.microsoft.com/en-us/library/dd756758%28VS.85%29.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd756758(VS.85).aspx"&gt;Save as an Image File Sample&lt;/A&gt; on MSDN. &lt;/LI&gt;&lt;/OL&gt;&lt;B&gt;Conclusion&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;As you can see above, using Direct2D for server rendering is simple and straight-forward. It provides high-quality and highly-parallelizable rendering that can be run in low privilege environments of the server. More information about how to use Direct2D can be found on MSDN &lt;A href="http://msdn.microsoft.com/en-us/library/dd370990%28VS.85%29.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd370990%28VS.85%29.aspx"&gt;here&lt;/A&gt;.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9893228" width="1" height="1"&gt;</content><author><name>Jianfeng Lin</name><uri>http://blogs.msdn.com/members/Jianfeng+Lin.aspx</uri></author><category term="DX" scheme="http://blogs.msdn.com/directx/archive/tags/DX/default.aspx" /><category term="Graphics" scheme="http://blogs.msdn.com/directx/archive/tags/Graphics/default.aspx" /><category term="Direct2D" scheme="http://blogs.msdn.com/directx/archive/tags/Direct2D/default.aspx" /></entry><entry><title>The Platform Update for Windows Vista </title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/directx/archive/2009/09/10/windows-7-transition-pack-for-windows-vista.aspx" /><id>http://blogs.msdn.com/directx/archive/2009/09/10/windows-7-transition-pack-for-windows-vista.aspx</id><published>2009-09-10T12:15:00Z</published><updated>2009-09-10T12:15:00Z</updated><content type="html">&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT size=3 face=Calibri&gt;Today on the &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;&lt;A title="The Windows Team Blog" href="http://windowsteamblog.com/blogs/windows7/archive/2009/09/10/announcing-new-tools-for-it-professionals-amp-developers-transitioning-to-windows-7.aspx" mce_href="http://windowsteamblog.com/blogs/windows7/archive/2009/09/10/announcing-new-tools-for-it-professionals-amp-developers-transitioning-to-windows-7.aspx"&gt;Windows Team Blog&lt;/A&gt; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;we announced the &lt;/SPAN&gt;Platform Update for Windows Vista&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;. This is a set of runtime libraries that makes it easy for developers to target both Windows 7 and Windows Vista. I am very pleased to tell you that the &lt;/SPAN&gt;Platform Update for Windows Vista &lt;SPAN style="mso-bidi-font-family: Calibri"&gt;includes the&amp;nbsp;new&amp;nbsp;DirectX package, including DirectWrite, Direct2D, Direct3D 11, updates to the Windows Imaging Components, XPS Print API, XPS Rasterization Service, and DXGI 1.1, enabling all new DirectX technologies on Windows Vista as well as Windows 7. In addition, the package provides&amp;nbsp;several other libraries for Windows Vista for ISVs and developers that are transitioning to Windows 7 that make it easier to target and support a mixed customer base of Windows 7 and Windows Vista-based systems.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Times New Roman','serif'"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV align=center&gt;
&lt;TABLE style="BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in" class=MsoNormalTable border=0 cellSpacing=0 cellPadding=0 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Feature&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Description&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Windows Graphics, Imaging, and XPS Library&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT size=3 face=Calibri&gt;Latest iteration of the DirectX platform: Direct3D 11, Direct3D 10 Level 9, WARP, Direct2D, DXGI 1.1, DirectWrite, Windows Imaging Components, and XPS Print API, XPS Rasterization Service&lt;/FONT&gt;&lt;A title=_GoBack name=_GoBack&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 2"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Windows Automation API&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Allows accessibility tools and test automations to access Windows user interface in a consistent way across operating system versions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 3"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Windows Portable Devices Platform&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Supplies the infrastructure to standardize data transfers between an application and a portable device, such as a mobile phone, digital camera, or portable media player.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 4; mso-yfti-lastrow: yes"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Windows Ribbon and Animation Manager Library&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #f0f0f0; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;Includes the Windows Ribbon API, a command framework that enables developers to quickly and easily create rich ribbon experiences in their applications, and the Windows Animation Manager API, an animation framework for managing the scheduling and execution of user interface element animations. The Windows Animation Manager API can be used with any graphics platform including Direct2D, Direct3D, or GDI+.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;The &lt;/SPAN&gt;Platform Update for Windows Vista &lt;SPAN style="mso-bidi-font-family: Calibri"&gt;will be supplied through Windows Update as a "recommended" install. The package requires Windows Vista SP2 or Windows Server 2008 SP2 or higher, and will be made available to the general public to download during the Windows 7 general availability time frame.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT size=3 face=Calibri&gt;This package provides many cool features from Windows 7 onto Windows Vista in order to make sure developers can target the widest audience without having to wait for everyone to upgrade to Windows 7 in the next few months. That being said, Windows 7 is really the best experience we are providing and if you haven’t already, we recommend checking it out for yourself at &lt;/FONT&gt;&lt;/SPAN&gt;&lt;A title="our Windows tour site" href="http://www.microsoft.com/windows/windows-7/features/tour.aspx" target=_blank mce_href="http://www.microsoft.com/windows/windows-7/features/tour.aspx"&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;our Windows 7 tour site&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT size=3 face=Calibri&gt;. If you are a TechNet subscriber, you can even get the RTM version of Windows 7 early at the &lt;/FONT&gt;&lt;/SPAN&gt;&lt;A title="Windows TechNet site" href="http://technet.microsoft.com/en-us/windows" target=_blank mce_href="http://technet.microsoft.com/en-us/windows"&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Windows TechNet site&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;!&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'PMingLiU','serif'"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-SIZE: 13.5pt; mso-bidi-font-family: Calibri"&gt;Starting Early&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-FAMILY: 'Times New Roman','serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;So what happens from now until Windows 7 general availability? We’ve set up a &lt;B&gt;public beta&lt;/B&gt; for the &lt;/SPAN&gt;Platform Update for Windows Vista &lt;SPAN style="mso-bidi-font-family: Calibri"&gt;to let developers try it out and for testing deployment. The public beta is also on Windows Update, but you must configure your machine to receive it. We’ve put all the proper setup procedures into a tool you can download off the Microsoft Download Center. Please refer to &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;A title="this download page" href="http://go.microsoft.com/fwlink/?LinkId=160189" target=_blank mce_href="http://go.microsoft.com/fwlink/?LinkId=160189"&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;this download page&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt; for information and instructions.&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'PMingLiU','serif'"&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-SIZE: 13.5pt; mso-bidi-font-family: Calibri"&gt;Writing Applications&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-FAMILY: 'Times New Roman','serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class=MsoNormal&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT size=3 face=Calibri&gt;In order to&amp;nbsp;create software that uses&amp;nbsp;DirectX, you’ll need an SDK to properly target the technologies. Probably the fastest way is to get the DirectX SDK, which includes the headers and import libraries for&amp;nbsp;most DirectX technologies. We just launched the &lt;/FONT&gt;&lt;/SPAN&gt;&lt;A title="August 2009 DirectX SDK" href="http://msdn.microsoft.com/directx/sdk/" target=_blank mce_href="http://msdn.microsoft.com/directx/sdk/"&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;&lt;STRONG&gt;August 2009 DirectX SDK&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt; which is available now. This is the RTM version to match Windows 7 and the &lt;/SPAN&gt;Platform Update for Windows Vista&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;, containing the first official release of the DirectX developer resources for Direct3D 11, DXGI, Direct2D, and DirectWrite. The DirectX SDK also includes a multitude of samples and tutorials for Direct3D, as well as the documentation for Direct3D and DXGI. Alternatively, the &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;A title="Windows 7 SDK" href="http://msdn.microsoft.com/en-us/bb980924.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/bb980924.aspx"&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;&lt;STRONG&gt;Windows 7 SDK&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&amp;nbsp;is the best way to go to get started with the Windows Imaging Components. In addition, the Windows SDK includes documentation and code samples for Direct2D,&amp;nbsp;DirectWrite,&amp;nbsp;and the Windows Imaging Components.&amp;nbsp;&amp;nbsp;With these SDKs, developers can now publish and distribute applications and games that leverage all of the software and hardware features of DirectX in Windows 7 and Windows Vista.&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'PMingLiU','serif'"&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class=MsoNormal&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-SIZE: 13.5pt; mso-bidi-font-family: Calibri"&gt;Using the &lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-SIZE: 13.5pt"&gt;Platform Update for Windows Vista&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-FAMILY: 'Times New Roman','serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;Once the &lt;/SPAN&gt;Platform Update for Windows Vista &lt;SPAN style="mso-bidi-font-family: Calibri"&gt;goes live, users who have enabled automatic updates will have the DirectX components installed automatically. This way, most Windows users on Windows Vista or Windows 7 will be ready to use DirectX content shortly after Windows 7 general availability. &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;However, not everyone will have Windows Update enabled on their machine. Our data indicates the number of people in this situation will be low, but if you want to target as many customers as possible it would be good to check. To help with this, we've included two resources in the August DirectX SDK: a technical article, &lt;B&gt;"Direct3D 11 Deployment for Game Developers"&lt;/B&gt;, which describes the Windows Update landscape in a little more detail and provides recommendations, and a code sample called the &lt;B&gt;D3D11InstallHelper &lt;/B&gt;which builds into an executable that will execute the whole installation experience for you. In addition, the code sample also provides a set of APIs that allows you to kick off the installation of &lt;/SPAN&gt;Platform Update for Windows Vista &lt;SPAN style="mso-bidi-font-family: Calibri"&gt;from within your application or installer. These resources install the entire &lt;/SPAN&gt;Platform Update for Windows Vista&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;, so although they reference Direct3D 11 in the name, rest assured that all of DirectX is covered. Check out the &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;A title="August 2009 DirectX SDK" href="http://msdn.microsoft.com/directx/sdk/" target=_blank mce_href="http://msdn.microsoft.com/directx/sdk/"&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;August 2009 DirectX SDK&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt; for details.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="mso-bidi-font-family: Calibri"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Thanks for reading, and we look forward to seeing the amazing applications you will make with DirectX!&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9887132" width="1" height="1"&gt;</content><author><name>moneppo</name><uri>http://blogs.msdn.com/members/moneppo.aspx</uri></author><category term="DX" scheme="http://blogs.msdn.com/directx/archive/tags/DX/default.aspx" /><category term="Graphics" scheme="http://blogs.msdn.com/directx/archive/tags/Graphics/default.aspx" /><category term="DirectX" scheme="http://blogs.msdn.com/directx/archive/tags/DirectX/default.aspx" /><category term="Direct2D" scheme="http://blogs.msdn.com/directx/archive/tags/Direct2D/default.aspx" /><category term="DirectWrite" scheme="http://blogs.msdn.com/directx/archive/tags/DirectWrite/default.aspx" /></entry><entry><title>DirectX Componentization and Interoperability</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/directx/archive/2009/08/26/directx-componentization-and-interoperability.aspx" /><id>http://blogs.msdn.com/directx/archive/2009/08/26/directx-componentization-and-interoperability.aspx</id><published>2009-08-26T22:15:00Z</published><updated>2009-08-26T22:15:00Z</updated><content type="html">&lt;P&gt;There are many different graphics technologies in Windows, and with Windows 7 we are adding to that collection with new technologies such as Direct2D and DirectWrite. Additionally, technologies such as GDI and GDI+ continue to be used in Windows software for many applications.&lt;/P&gt;
&lt;P&gt;As we have mentioned before, these technologies were all designed with some set of scenarios and customers in mind at some point. And many of these technologies have enjoyed success and are used by a variety of applications, some of which have a history going back more than a decade. For these reasons and more, adopting new technology typically is not done with a brand new application from scratch. Normally there is an existing body of code that either needs to be ported to a new technology, or needs to work with the new technology as seamlessly as possible.&lt;/P&gt;
&lt;P&gt;In this post I want to cover the concept of API interoperability. For the purposes of this post, this is defined as a point in one API where resources from another API can be used. Basically, this denotes a point where the two technologies can be ‘joined together’ and is an opportunity for different versions of the same technology to work together (for example, using D3D11 with D3D10), or for technologies that do similar things to work together (for example, drawing to a GDI surface with D2D). This capability to use APIs together has always existed with DirectX, but some of the mechanisms have been more efficient than others in the past.&lt;/P&gt;
&lt;P&gt;This post is not meant to be exhaustive – each of these points can sometimes require some depth of learning to be harnessed effectively, and future blog posts and white papers will do that. The main goal is to highlight the places where our technologies work together and discuss the philosophy we have around that moving forward.&lt;/P&gt;
&lt;P&gt;The current landscape of DirectX technology is vast. Below is a diagram that I have created to attempt to show both existing technologies (in orange), our new / evolved technology for Windows 7 (in blue) and show an interface or method that links them together wherever possible.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 624px; HEIGHT: 637px" title="Interoperability diagram" alt="Interoperability diagram" src="http://blogs.msdn.com/photos/directx/images/9877736/original.aspx" width=624 height=637 mce_src="http://blogs.msdn.com/photos/directx/images/9877736/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;Note that this “subway map” of DirectX APIs does not cover every single way of making them work together, just the main supported or advised ways of doing so. Most APIs have a way of reading and writing raw memory for surfaces, and this is always the most basic way of making two things work together. However, this method of interoperability has the weakness of not allowing good performance when video memory is brought into the picture. It also does not allow an application to take advantage of improvements in how technologies can work together over time.&lt;/P&gt;
&lt;P&gt;There are some key concepts that should be gleaned from this diagram:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The legacy runtimes were not the best at working together. D3D10.0 had no way to talk with GDI. D3D10.0 and D3D9Ex could share surfaces, but they had to manually synchronize. This was a known pain point for developers and is hard to do, because basically you have two different runtimes both asynchronously communicating to the hardware and knowing the state of synchronization between two APIs is difficult.&lt;/LI&gt;
&lt;LI&gt;The Windows 7 technologies are all linked in a common sense way. D2D was designed to consume WIC bitmaps easily and to draw DWrite text easily. D2D can render to D3D10.1 textures without doing any copying or GPU / CPU synchronization. And D3D10.1 and D3D11 can share surfaces between their devices without GPU / CPU synchronization. Going forward we want to keep our new technologies working together this way as a cohesive, componentized stack.&lt;/LI&gt;
&lt;LI&gt;The new Windows 7 APIs can work together with our legacy APIs. They can all talk to GDI (with D3D runtimes doing this through DXGI). This is important because so many applications are still built with GDI, and working with GDI allows incremental use of the new technology as well as an easier port of existing technology if desired. Legacy D3D runtimes can share surfaces with the new runtimes if need be as well.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Hopefully the current state of affairs is clear – we are committed to making sure that our current APIs and technologies work together as well as they can. We know that ideally every single API will work well with any other API, but the reality is that time is limited and we chose to focus on getting the new APIs to work well with GDI, since this is a known point where people need interoperability to work. We will never reach the point where we have 100% mixing of any two APIs, because not all combinations equal sense – we want to invest more heavily in the areas that have the most demand.&lt;/P&gt;
&lt;P&gt;There are many challenges in making interoperability fast, but there are three main factors that are responsible for creating bottlenecks:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Copying resources around in system memory – this eats memory bandwidth and CPU time, either limiting the performance or making an experience eat more resources than it should.&lt;/LI&gt;
&lt;LI&gt;Moving content between the GPU and the CPU – this can tie up the system bus, and tie up resources in managing the copy. It normally also involves similar memory access problems to the normal copying.&lt;/LI&gt;
&lt;LI&gt;Synchronizing GPU / CPU state – the normal mode of operation for GPU communication is asynchronous, because this increases performance by allowing batching up of commands. Synchronization involves flushing these commands and causing a CPU wait.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;In the future our goal is to continue to make our technologies work better together at the API level, mainly through developing all of the components as a cohesive stack that works better together by design and works to remove the above bottlenecks as much as possible. This will be a challenge going forward, but designing this in at the beginning is easier than bolting it on later. &lt;/P&gt;
&lt;P&gt;If there is a particular connection or set of connections in the above diagram that you would like to see more detail on, please leave a comment and let us know. More data about the detail that people want is very useful.&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9867267" width="1" height="1"&gt;</content><author><name>BenCon</name><uri>http://blogs.msdn.com/members/BenCon.aspx</uri></author><category term="DX" scheme="http://blogs.msdn.com/directx/archive/tags/DX/default.aspx" /><category term="Graphics" scheme="http://blogs.msdn.com/directx/archive/tags/Graphics/default.aspx" /><category term="DirectX" scheme="http://blogs.msdn.com/directx/archive/tags/DirectX/default.aspx" /><category term="GDI+" scheme="http://blogs.msdn.com/directx/archive/tags/GDI_2B00_/default.aspx" /><category term="GDI" scheme="http://blogs.msdn.com/directx/archive/tags/GDI/default.aspx" /><category term="Direct2D" scheme="http://blogs.msdn.com/directx/archive/tags/Direct2D/default.aspx" /><category term="DirectWrite" scheme="http://blogs.msdn.com/directx/archive/tags/DirectWrite/default.aspx" /></entry></feed>