{"id":4007,"date":"2015-11-25T16:08:07","date_gmt":"2015-11-25T16:08:07","guid":{"rendered":"http:\/\/anthroponaute.fr\/blog-informatique\/?p=4007"},"modified":"2015-12-07T08:03:23","modified_gmt":"2015-12-07T08:03:23","slug":"introduction-a-directx-10-activer-le-super-echantillonnage-partie-5","status":"publish","type":"post","link":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/?p=4007","title":{"rendered":"Introduction \u00e0 DirectX 10 &#8211; Activer le super \u00e9chantillonnage &#8211; partie 5"},"content":{"rendered":"<p><a href=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/directx9c.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1053\" src=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/directx9c.png\" alt=\"directx9c\" width=\"346\" height=\"360\" srcset=\"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/directx9c.png 346w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/directx9c-288x300.png 288w\" sizes=\"(max-width: 346px) 100vw, 346px\" \/><\/a><\/p>\n<p><strong>Intro :<\/strong><\/p>\n<p>Dans une application graphique, les objets du rendu peuvent subir ce qu&rsquo;on appelle un \u00ab\u00a0<strong>cr\u00e9nelage<\/strong>\u00a0\u00bb ou un \u00ab\u00a0<strong>aliasing<\/strong>\u00a0\u00bb en anglais.<\/p>\n<p>Il appara\u00eet comme un <em>escalier<\/em> autour de la ligne affich\u00e9e.<\/p>\n<p>La ligne du bas repr\u00e9sente la correction de l&rsquo;effet d&rsquo;escalier de la ligne du haut.<\/p>\n<p><a href=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/cr\u00e9n\u00e9lage.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-4015\" src=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/cr\u00e9n\u00e9lage.png\" alt=\"cr\u00e9n\u00e9lage\" width=\"320\" height=\"240\" srcset=\"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/cr\u00e9n\u00e9lage.png 320w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/cr\u00e9n\u00e9lage-300x225.png 300w\" sizes=\"(max-width: 320px) 100vw, 320px\" \/><\/a><\/p>\n<p><strong>Pr\u00e9requis :<\/strong><\/p>\n<p>&#8211; Savoir initialiser DirectX 10.1<\/p>\n<p><strong>Explications :<\/strong><\/p>\n<h2><strong>Cinqui\u00e8me partie :<\/strong><\/h2>\n<p>Par d\u00e9faut, DirectX 10.1 g\u00e8re un type d&rsquo;anticr\u00e9nelage nomm\u00e9 <strong>Multisample anti-aliasing<\/strong> (<em>MSAA<\/em>)<\/p>\n<p>1) L&rsquo;anti-aliasing<strong> activ\u00e9<\/strong> :<\/p>\n<p><a href=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/AA_on.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-4320\" src=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/AA_on.png\" alt=\"AA_on\" width=\"1243\" height=\"864\" srcset=\"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/AA_on.png 1243w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/AA_on-300x209.png 300w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/AA_on-1024x712.png 1024w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/AA_on-624x434.png 624w\" sizes=\"(max-width: 1243px) 100vw, 1243px\" \/><\/a><\/p>\n<p>1) L&rsquo;anti-aliasing<strong> d\u00e9sactiv\u00e9<\/strong> :<\/p>\n<p><a href=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/AA_off1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-4322\" src=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/AA_off1.png\" alt=\"AA_off\" width=\"1216\" height=\"833\" srcset=\"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/AA_off1.png 1216w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/AA_off1-300x206.png 300w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/AA_off1-1024x701.png 1024w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/AA_off1-624x427.png 624w\" sizes=\"(max-width: 1216px) 100vw, 1216px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"text-decoration: underline;\">Comment activer le multi-sampling dans le code ?<\/span><\/p>\n<p>Lors de l&rsquo;appel \u00e0 <em>D3D10CreateDeviceAndSwapChain<\/em> il faut sp\u00e9cifier dans la structure <em>DXGI_SWAP_CHAIN_DESC <\/em>:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nDXGI_SWAP_CHAIN_DESC sd;\r\nZeroMemory(&amp;amp;sd, sizeof(sd));\r\nsd.BufferCount = 1;\r\nsd.BufferDesc.Width = m_iWidth;\r\nsd.BufferDesc.Height = m_iHeight;\r\nsd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;\r\nsd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;\r\nsd.BufferDesc.RefreshRate.Numerator = 0;\r\nsd.BufferDesc.RefreshRate.Denominator = 1;\r\nsd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;\r\nsd.OutputWindow = m_hWnd;\r\n\r\n\/\/----------------------------------\/\/\r\n\r\n\/* On indique le nombre d'\u00e9chantillons de l'anti-aliasing *\/\r\nsd.SampleDesc.Count = m_iFSAASampleCount;\r\n\/* On indique le niveau de qualit\u00e9 de l'anti-aliasing *\/\r\nsd.SampleDesc.Quality = 0;\r\n\r\n\/\/----------------------------------\/\/\r\n\r\n\/\/ Fen\u00eatr\u00e9 ou non\r\nsd.Windowed = !m_bFullscreen;\r\nsd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/warning_small.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-4334\" src=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/11\/warning_small.png\" alt=\"warning_small\" width=\"80\" height=\"67\" \/><\/a><\/p>\n<p><span style=\"text-decoration: underline;\">Il reste deux \u00e9tapes \u00e0 ne pas oublier d&rsquo;effectuer :<\/span><\/p>\n<p><strong><br \/>\n1) Effectuer la m\u00eame configuration que pr\u00e9c\u00e9demment, lors la cr\u00e9ation de la texture du deph-stencil<\/strong> :<\/p>\n<p>Il faut sp\u00e9cifier la m\u00eame configuration que pr\u00e9c\u00e9demment, sinon cela ne fonctionnera pas !<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nD3D10_TEXTURE2D_DESC descDepth;\r\nZeroMemory(&amp;amp;descDepth, sizeof(descDepth));\r\ndescDepth.Width = m_iWidth;\r\ndescDepth.Height = m_iHeight;\r\ndescDepth.MipLevels = 1;\r\ndescDepth.ArraySize = 1;\r\ndescDepth.Format = DXGI_FORMAT_D32_FLOAT;\r\n\r\n\/\/----------------------------------\/\/\r\n\r\n\/* On indique le nombre d'\u00e9chantillons de l'anti-aliasing *\/\r\ndescDepth.SampleDesc.Count = m_iFSAASampleCount;\r\n\/* On indique le niveau de qualit\u00e9 de l'anti-aliasing *\/\r\ndescDepth.SampleDesc.Quality = 0;\r\n\r\n\/\/----------------------------------\/\/\r\n\r\ndescDepth.Usage = D3D10_USAGE_DEFAULT;\r\ndescDepth.BindFlags = D3D10_BIND_DEPTH_STENCIL;\r\ndescDepth.CPUAccessFlags = 0;\r\ndescDepth.MiscFlags = 0;\r\n\r\nm_pd3dDevice-&amp;gt;CreateTexture2D(&amp;amp;descDepth, nullptr, &amp;amp;m_pDepthStencil);\r\n\r\n<\/pre>\n<p><strong><br \/>\n2) Effectuer une certaine configuration lors la cr\u00e9ation de la DepthStencilView<\/strong> :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nD3D10_DEPTH_STENCIL_VIEW_DESC descDSV;\r\ndescDSV.Format = descDepth.Format;\r\n\r\nif (m_iFSAALevel &amp;gt; 1)\r\n{\r\n     descDSV.ViewDimension = D3D10_DSV_DIMENSION_TEXTURE2DMS;\r\n}\r\nelse\r\n{\r\n     descDSV.ViewDimension = D3D10_DSV_DIMENSION_TEXTURE2D;\r\n}\r\n\r\ndescDSV.Texture2D.MipSlice = 0;\r\n\r\nm_pd3dDevice-&amp;gt;CreateDepthStencilView(m_pDepthStencil, &amp;amp;descDSV, &amp;amp;m_pDepthStencilView);\r\n<\/pre>\n<p>&nbsp;<\/p>\n<hr \/>\n<p>&nbsp;<\/p>\n<p>Voici une fonction qui permet d&rsquo;afficher les capacit\u00e9s possibles de votre carte graphique en mati\u00e8re d&rsquo;anti-aliasing.<\/p>\n<p>Il faut obtenir le nombre d&rsquo;\u00e9chantillons m_iFSAASampleCount par ce bais :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nvoid PrintFSAACapabilities()\r\n{\r\n\u00a0\u00a0 \u00a0HRESULT hr = S_OK;\r\n\u00a0\u00a0 \u00a0UINT maxQualityLevel = 1;\r\n\r\n\u00a0\u00a0 \u00a0for (UINT iSampleCount = 1; iSampleCount &amp;lt;= D3D10_MAX_MULTISAMPLE_SAMPLE_COUNT; iSampleCount++)\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0hr = m_pd3dDevice-&amp;gt;CheckMultisampleQualityLevels(\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DXGI_FORMAT_R8G8B8A8_UNORM, iSampleCount, &amp;amp;maxQualityLevel);\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (hr != S_OK)\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0std::cout &amp;lt;&amp;lt; &amp;quot;CheckMultisampleQualityLevels a \u00e9chouee.&amp;quot; &amp;lt;&amp;lt; std::endl;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (maxQualityLevel &amp;gt; 0)\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0std::cout &amp;lt;&amp;lt; &amp;quot;MSAA &amp;quot; &amp;lt;&amp;lt; iSampleCount &amp;lt;&amp;lt; (&amp;quot;X supportee par la carte vid\u00e9o avec &amp;quot;) &amp;lt;&amp;lt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0maxQualityLevel &amp;lt;&amp;lt; &amp;quot; niveau(x) de qualite.&amp;quot; &amp;lt;&amp;lt; std::endl;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0}\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>R\u00e9sum\u00e9 :<\/strong><\/p>\n<p>Nous avons pr\u00e9sent\u00e9 comment proc\u00e9der pour afficher dans DirectX 10 les diff\u00e9rents niveaux d&rsquo;anticr\u00e9n\u00e9lages possibles par la carte vid\u00e9o et comment les activer.<\/p>\n<p><strong>R\u00e9f\u00e9rences :<\/strong><\/p>\n<p>&#8211; Windows DirectX Graphics Documentation (SDK June 2010)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Intro : Dans une application graphique, les objets du rendu peuvent subir ce qu&rsquo;on appelle un \u00ab\u00a0cr\u00e9nelage\u00a0\u00bb ou un \u00ab\u00a0aliasing\u00a0\u00bb en anglais. Il appara\u00eet comme un escalier autour de la ligne affich\u00e9e. La ligne du bas repr\u00e9sente la correction de l&rsquo;effet d&rsquo;escalier de la ligne du haut. Pr\u00e9requis : &#8211; Savoir initialiser DirectX 10.1 Explications [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[9],"tags":[],"_links":{"self":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/4007"}],"collection":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4007"}],"version-history":[{"count":44,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/4007\/revisions"}],"predecessor-version":[{"id":4442,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/4007\/revisions\/4442"}],"wp:attachment":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4007"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4007"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4007"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}