{"id":518,"date":"2015-02-25T13:48:01","date_gmt":"2015-02-25T13:48:01","guid":{"rendered":"http:\/\/anthroponaute.fr\/blog-informatique\/?p=518"},"modified":"2015-11-13T08:57:27","modified_gmt":"2015-11-13T08:57:27","slug":"introduction-a-directx-10-1","status":"publish","type":"post","link":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/?p=518","title":{"rendered":"Introduction \u00e0 DirectX 10 &#8211; Fen\u00eatrage &#8211; partie  1"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone\" src=\"http:\/\/www.softwarepatch.com\/articles\/wp-content\/uploads\/2013\/11\/directx9c.jpg\" alt=\"\" width=\"346\" height=\"360\" \/><\/p>\n<p><strong>Intro :<\/strong><\/p>\n<p>Ceci constitue une introduction \u00e0 la version 10 de DirectX.<\/p>\n<p>DirectX est une interface entre le programmeur et la carte graphique.<\/p>\n<p>Dans cette partie je vais vous apprendre \u00e0 l&rsquo;initialiser de mani\u00e8re rudimentaire.<\/p>\n<p><strong>Pr\u00e9requis :<\/strong><\/p>\n<p>Savoir programmer en C++.<\/p>\n<h2><strong>Premi\u00e8re partie :<\/strong><\/h2>\n<p>Cr\u00e9ation de la fen\u00eatre de rendu.<\/p>\n<p><strong>Explications :<br \/>\n<\/strong><br \/>\nPensez \u00e0 configurer les chemins d&rsquo;acc\u00e8s du SDK de DirectX\u00a0 dans VC++ ! Si vous ne savez pas comment faire : lire ce tutoriel.<\/p>\n<p>On a besoin d&rsquo;utiliser une fonction qui boucle \u00e0 chaque fois que l&rsquo;application re\u00e7oit<br \/>\nun message :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nLRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)\r\n{\r\n\u00a0\u00a0\u00a0 switch (message)\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case WM_DESTROY:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PostQuitMessage(0);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 default:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return DefWindowProc(hWnd, message, wParam, lParam);\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0\r\n\u00a0\u00a0\u00a0 return 0;\r\n}\r\n\r\n<\/pre>\n<hr \/>\n<p>Ensuite cr\u00e9ez un fichier System.cpp et un fichier System.h o\u00f9 vous mettrez les fonctions que je vous \u00e9noncerai.<\/p>\n<p>Voici le fichier System.h :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\n#ifndef SYSTEM_H\r\n#define SYSTEM_H\r\n\r\n#include &quot;Defines.h&quot;\r\n#include &quot;D3D10Renderer.h&quot;\r\n\r\nclass System\r\n\r\n{\r\npublic:\r\n\u00a0\u00a0 \u00a0System();\r\n\u00a0\u00a0 \u00a0virtual ~System();\r\n\r\n\u00a0\u00a0 \u00a0bool Initialize();\r\n\u00a0\u00a0 \u00a0void Shutdown();\r\n\u00a0\u00a0 \u00a0bool Frame();\r\n\u00a0\u00a0 \u00a0bool Run();\r\n\r\n\u00a0\u00a0 \u00a0HRESULT SetupTheWindow();\r\n\u00a0\u00a0 \u00a0void DestroyTheWindow();\r\n\r\nprivate:\r\n    \/\/ Objet qui g\u00e8re le rendu de DirectX\r\n\u00a0\u00a0 \u00a0D3D10Renderer* m_pRenderer;\r\n\u00a0\u00a0 \u00a0LPCWSTR m_sApplicationName;\r\n\u00a0\u00a0\u00a0 HINSTANCE m_hInstance;\r\n\u00a0\u00a0\u00a0 HWND m_Hwnd;\r\n\u00a0\u00a0 \u00a0bool m_bFullScreen;\r\n};\r\n\r\n#endif\r\n<\/pre>\n<p>Dans le fichier System.cpp. On initialise d&rsquo;abord une fen\u00eatre Windows ; voici la fonction pour l&rsquo;initialiser :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\nHRESULT System::SetupTheWindow()\r\n{\r\n\u00a0\u00a0 \u00a0\/\/ D\u00e9termine la r\u00e9solution de l'\u00e9cran.\r\n\u00a0\u00a0 \u00a0unsigned int iScreenWidth\u00a0 = GetSystemMetrics(SM_CXSCREEN);\r\n\u00a0\u00a0 \u00a0unsigned int iScreenHeight = GetSystemMetrics(SM_CYSCREEN);\r\n\r\n\u00a0\u00a0 \u00a0\/\/ Structure de la classe \u00e0 configurer\r\n\u00a0\u00a0\u00a0 WNDCLASSEX wcex;\r\n\r\n\u00a0\u00a0\u00a0 \/\/ Taille de la structure WNDCLASSEX\r\n\u00a0\u00a0\u00a0 wcex.cbSize = sizeof( WNDCLASSEX );\r\n\r\n\u00a0\u00a0\u00a0 \/\/ Style de la classe\r\n\u00a0\u00a0\u00a0 wcex.style = CS_HREDRAW | CS_VREDRAW;\r\n\r\n\u00a0\u00a0 \u00a0\/\/ Pointeur de la fonction de boucle de fen\u00eatre (Callback)\r\n\u00a0\u00a0\u00a0 wcex.lpfnWndProc = WndProc;\r\n\r\n\u00a0\u00a0 \u00a0\/\/ Inutile \u00e0 comprendre\r\n\u00a0\u00a0\u00a0 wcex.cbClsExtra = 0;\r\n\r\n\u00a0\u00a0\u00a0 \/\/ Inutile \u00e0 comprendre\r\n\u00a0\u00a0\u00a0 wcex.cbWndExtra = 0;\r\n\r\n\u00a0\u00a0 \u00a0\/\/ Obtention de l'instance de cette application\r\n\u00a0\u00a0\u00a0 wcex.hInstance = m_hInstance;\r\n\r\n\u00a0\u00a0\u00a0 \/\/ Icone de la fen\u00eatre\r\n\u00a0\u00a0\u00a0 wcex.hIcon = LoadIcon(NULL, IDI_WINLOGO);\r\n\r\n\u00a0\u00a0\u00a0 \/\/ Icone du pointeur de la souris\r\n\u00a0\u00a0\u00a0 wcex.hCursor = LoadCursor( NULL, IDC_ARROW );\r\n\r\n\u00a0\u00a0\u00a0 \/\/ Inutile \u00e0 comprendre\r\n\u00a0\u00a0\u00a0 wcex.hbrBackground = ( HBRUSH )( COLOR_WINDOW + 1 );\r\n\r\n\u00a0\u00a0\u00a0 \/\/ Inutile \u00e0 comprendre\r\n\u00a0\u00a0\u00a0 wcex.lpszMenuName = NULL;\r\n\r\n\u00a0\u00a0\u00a0 \/\/ Nom de la classe enregistr\u00e9e\r\n\u00a0\u00a0\u00a0 wcex.lpszClassName = m_sApplicationName;\r\n\r\n\u00a0\u00a0\u00a0 wcex.hIconSm = wcex.hIcon;\r\n\r\n\u00a0\u00a0 \u00a0DEVMODE dmScreenSettings;\r\n\r\n\u00a0\u00a0 \u00a0if(m_bFullScreen)\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ZeroMemory(&amp;dmScreenSettings, sizeof(dmScreenSettings));\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0dmScreenSettings.dmSize\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = sizeof (dmScreenSettings);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0dmScreenSettings.dmPelsWidth\u00a0 = (unsigned long) iScreenWidth;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0dmScreenSettings.dmPelsHeight = (unsigned long) iScreenHeight;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0dmScreenSettings.dmBitsPerPel = 32;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0dmScreenSettings.dmFields\u00a0\u00a0\u00a0\u00a0 = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ChangeDisplaySettings(&amp;dmScreenSettings, CDS_FULLSCREEN);\r\n\u00a0\u00a0 \u00a0}\r\n\r\n\u00a0\u00a0\u00a0 if (!RegisterClassEx(&amp;wcex))\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return E_FAIL;\r\n\r\n\u00a0\u00a0\u00a0 \/\/ Cr\u00e9\u00e9 la fen\u00eatre\r\n\u00a0\u00a0\u00a0 RECT rc = { 0, 0, 640, 480 };\r\n\u00a0\u00a0\u00a0 AdjustWindowRect( &amp;rc, WS_OVERLAPPEDWINDOW, FALSE );\r\n\u00a0\u00a0\u00a0 m_Hwnd = CreateWindow(m_sApplicationName, m_sApplicationName, WS_OVERLAPPEDWINDOW,\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 CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, m_hInstance,\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 NULL);\r\n\u00a0\u00a0\u00a0 if (!m_Hwnd)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return E_FAIL;\r\n\r\n\u00a0\u00a0\u00a0 ShowWindow(m_Hwnd, SW_SHOW);\r\n\r\n\u00a0\u00a0 \u00a0SetForegroundWindow(m_Hwnd);\r\n\u00a0\u00a0 \u00a0SetFocus(m_Hwnd);\r\n\r\n\u00a0\u00a0\u00a0 return S_OK;\r\n}\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Toujours dans System.cpp, la fonction pour d\u00e9truire la fen\u00eatre :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\nvoid System::DestroyTheWindow()\r\n{\r\n\u00a0\u00a0\u00a0 \/\/ Change les param\u00e8tres d'affichage si l'on quitte le mode plein \u00e9cran\r\n\u00a0\u00a0\u00a0 if(m_bFullScreen)\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ChangeDisplaySettings(NULL, 0);\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 \/\/ D\u00e9truit la fen\u00eatre.\r\n\u00a0\u00a0\u00a0 DestroyWindow(m_Hwnd);\r\n\u00a0\u00a0\u00a0 m_Hwnd = NULL;\r\n\r\n\u00a0\u00a0\u00a0 \/\/ D\u00e9truit l'instance de l'application\r\n\u00a0\u00a0\u00a0 UnregisterClass(m_sApplicationName, m_hInstance);\r\n\u00a0\u00a0\u00a0 m_hInstance = NULL;\r\n}\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>La fonction pour initialiser la fen\u00eatre et le Renderer de DirectX 10 :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\nbool System::Initialize()\r\n{\r\n\u00a0\u00a0 \u00a0SetupTheWindow();\r\n\r\n\u00a0\u00a0 \u00a0m_pRenderer = new D3D10Renderer(m_Hwnd);\r\n\u00a0\u00a0 \u00a0bool bSucess = m_pRenderer-&gt;Initialize(m_bFullScreen);\r\n\r\n\u00a0\u00a0 \u00a0if (!bSucess)\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0MessageBoxA(NULL, &quot;Erreur d'initialisation de DirectX !&quot;, &quot;Erreur&quot;, MB_ICONHAND | MB_OK);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0return false;\r\n\u00a0\u00a0 \u00a0}\r\n\r\n\u00a0\u00a0 \u00a0return true;\r\n}\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p>&nbsp;<\/p>\n<p>La fonction WinMain est dans le fichier Main.cpp et est impl\u00e9ment\u00e9e de cette fa\u00e7on :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#include &quot;D3D10Renderer.h&quot;\r\n#include &quot;System.h&quot;\r\n\r\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 LPSTR lpCmdLine, int nCmdShow)\r\n{\r\n\u00a0\u00a0\u00a0 System* pSystem = new System();\r\n\r\n\u00a0\u00a0\u00a0 bool bSucess = pSystem-&gt;Initialize();\r\n\r\n\u00a0\u00a0\u00a0 if (bSucess)\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 pSystem-&gt;Run();\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 pSystem-&gt;Shutdown();\r\n\r\n\u00a0\u00a0 \u00a0SAFE_DELETE(pSystem);\r\n\r\n\u00a0\u00a0\u00a0 return 0;\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<hr \/>\n<p>&nbsp;<\/p>\n<p>Ensuite cr\u00e9ez un fichier D3D10Renderer.cpp et un fichier D3D10Renderer.h o\u00f9 vous mettrez les fonctions que je vous \u00e9noncerai.<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\nbool D3D10Renderer::Initialize(bool bFullScreen)\r\n{\r\n\u00a0\u00a0\u00a0 HRESULT hr = S_OK;;\r\n\u00a0\u00a0\u00a0 RECT rc;\r\n\r\n\u00a0\u00a0\u00a0 GetClientRect(m_hWnd, &amp;rc);\r\n\u00a0\u00a0\u00a0 UINT width = rc.right - rc.left;\r\n\u00a0\u00a0\u00a0 UINT height = rc.bottom - rc.top;\r\n\r\n\u00a0\u00a0\u00a0 UINT createDeviceFlags = 0;\r\n\r\n#ifdef _DEBUG\r\n\u00a0\u00a0\u00a0 createDeviceFlags |= D3D10_CREATE_DEVICE_DEBUG;\r\n#endif\r\n    \/\/ Une swap chain repr\u00e9sente en fait le back buffer\r\n    \/\/ et le front buffer (principe nomm\u00e9 double buffering)\r\n\u00a0\u00a0\u00a0 DXGI_SWAP_CHAIN_DESC sd;\r\n\u00a0\u00a0\u00a0 ZeroMemory(&amp;sd, sizeof(sd));\r\n\u00a0\u00a0\u00a0 sd.BufferCount = 1;\r\n\u00a0\u00a0\u00a0 sd.BufferDesc.Width = width;\r\n\u00a0\u00a0\u00a0 sd.BufferDesc.Height = height;\r\n\u00a0\u00a0\u00a0 sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;\r\n\u00a0\u00a0\u00a0 sd.BufferDesc.RefreshRate.Numerator = 60;\r\n\u00a0\u00a0\u00a0 sd.BufferDesc.RefreshRate.Denominator = 1;\r\n\u00a0\u00a0\u00a0 sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;\r\n\u00a0\u00a0\u00a0 sd.OutputWindow = m_hWnd;\r\n\u00a0\u00a0\u00a0 sd.SampleDesc.Count = 1;\r\n\u00a0\u00a0\u00a0 sd.SampleDesc.Quality = 0;\r\n\u00a0\u00a0 \u00a0sd.Windowed = !bFullScreen;\r\n\u00a0\u00a0 \u00a0sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;\r\n\r\n\u00a0\u00a0\u00a0 hr = D3D10CreateDeviceAndSwapChain(NULL, D3D10_DRIVER_TYPE_HARDWARE, NULL, createDeviceFlags,\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\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 D3D10_SDK_VERSION, &amp;sd, &amp;m_pSwapChain, &amp;m_pd3dDevice);\r\n\u00a0\u00a0\u00a0 if (FAILED(hr))\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return false;\r\n\r\n\u00a0\u00a0\u00a0 \/\/ Cr\u00e9\u00e9 le back buffer\r\n\u00a0\u00a0\u00a0 ID3D10Texture2D* pBackBuffer;\r\n\u00a0\u00a0\u00a0 hr = m_pSwapChain-&gt;GetBuffer(0, __uuidof(ID3D10Texture2D), (LPVOID*)&amp;pBackBuffer);\r\n\u00a0\u00a0\u00a0 if (FAILED(hr))\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return false;\r\n    \/\/ Cr\u00e9\u00e9 la render target\r\n\u00a0\u00a0\u00a0 hr = m_pd3dDevice-&gt;CreateRenderTargetView(pBackBuffer, NULL, &amp;m_pRenderTargetView);\r\n\u00a0\u00a0\u00a0 pBackBuffer-&gt;Release();\r\n\u00a0\u00a0\u00a0 if (FAILED(hr))\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return false;\r\n\r\n\u00a0\u00a0\u00a0 m_pd3dDevice-&gt;OMSetRenderTargets( 1, &amp;m_pRenderTargetView, NULL );\r\n\r\n\u00a0\u00a0\u00a0 \/\/ Cr\u00e9ation du viewport\r\n\u00a0\u00a0\u00a0 D3D10_VIEWPORT vp;\r\n\u00a0\u00a0\u00a0 vp.Width = width;\r\n\u00a0\u00a0\u00a0 vp.Height = height;\r\n\u00a0\u00a0\u00a0 vp.MinDepth = 0.0f;\r\n\u00a0\u00a0\u00a0 vp.MaxDepth = 1.0f;\r\n\u00a0\u00a0\u00a0 vp.TopLeftX = 0;\r\n\u00a0\u00a0\u00a0 vp.TopLeftY = 0;\r\n\u00a0\u00a0\u00a0 m_pd3dDevice-&gt;RSSetViewports( 1, &amp;vp );\r\n\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 return true;\r\n}\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>La fonction pour afficher le rendu :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\nvoid D3D10Renderer::Render()\r\n{\r\n\u00a0\u00a0\u00a0 float afClearColor[4] = {0.0f, 0.125f, 0.3f, 1.0f}; \r\n\r\n\u00a0\u00a0 \u00a0m_pd3dDevice-&gt;ClearRenderTargetView(m_pRenderTargetView, afClearColor);\r\n\u00a0\u00a0\u00a0 m_pSwapChain-&gt;Present(1, 0);\r\n}\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>R\u00e9sum\u00e9 :<\/strong><\/p>\n<p>Nous avons affich\u00e9 une fen\u00eatre pr\u00eate \u00e0 recevoir le rendu de DirectX.<\/p>\n<p><a href=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/02\/fenetre.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone  wp-image-1119\" src=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/02\/fenetre.png\" alt=\"fenetre\" width=\"481\" height=\"381\" srcset=\"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/02\/fenetre.png 651w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/02\/fenetre-300x238.png 300w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/02\/fenetre-624x495.png 624w\" sizes=\"(max-width: 481px) 100vw, 481px\" \/><\/a><\/p>\n<p>Voici<strong> l&rsquo;archive<\/strong> du code complet pour cette partie : <a href=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/data\/DirectX%2010%20Tutoriel%20-%20Partie%201.zip\">DirectX 10 Tutoriel &#8211; Partie 1.zip <\/a><\/p>\n<p>Voil\u00e0 le code et les explications pour initialiser la fen\u00eatre de DirectX 10.<br \/>\nIl reste beaucoup de choses \u00e0 int\u00e9grer pour faire un jeu mais vous saurez au moins comment int\u00e9grer DirectX 10.<\/p>\n<p><strong>R\u00e9f\u00e9rences :<\/strong><\/p>\n<p>&#8211; https:\/\/takinginitiative.wordpress.com\/directx10-tutorials\/<\/p>\n<p>&#8211; http:\/\/www.rastertek.com\/tutdx10.html<\/p>\n<p>&#8211; DirectX SDK June 2010 Documentation Samples<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Intro : Ceci constitue une introduction \u00e0 la version 10 de DirectX. DirectX est une interface entre le programmeur et la carte graphique. Dans cette partie je vais vous apprendre \u00e0 l&rsquo;initialiser de mani\u00e8re rudimentaire. Pr\u00e9requis : Savoir programmer en C++. Premi\u00e8re partie : Cr\u00e9ation de la fen\u00eatre de rendu. Explications : Pensez \u00e0 configurer [&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\/518"}],"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=518"}],"version-history":[{"count":129,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/518\/revisions"}],"predecessor-version":[{"id":3388,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/518\/revisions\/3388"}],"wp:attachment":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}