{"id":234,"date":"2015-02-22T13:32:15","date_gmt":"2015-02-22T13:32:15","guid":{"rendered":"http:\/\/anthroponaute.fr\/blog-informatique\/?p=234"},"modified":"2016-07-20T11:54:52","modified_gmt":"2016-07-20T11:54:52","slug":"initialiser-rapidement-directx-10-1-avec-dxut","status":"publish","type":"post","link":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/?p=234","title":{"rendered":"Initialiser rapidement DirectX 10.1 avec DXUT"},"content":{"rendered":"<p><a href=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/02\/1342671301_50721.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone  wp-image-5191\" src=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/02\/1342671301_50721.jpg\" alt=\"1342671301_50721\" width=\"461\" height=\"288\" srcset=\"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/02\/1342671301_50721.jpg 750w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/02\/1342671301_50721-300x187.jpg 300w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/02\/1342671301_50721-624x389.jpg 624w\" sizes=\"(max-width: 461px) 100vw, 461px\" \/><\/a><\/p>\n<p><strong>Intro :<\/strong><\/p>\n<p>DXUT est un framework qui vous permet d&rsquo;initialiser de mani\u00e8re plus rapide et plus simple DirectX 10 \u00e0 travers des fonctions toutes pr\u00eates.<\/p>\n<p><strong>Pr\u00e9requis :<\/strong><\/p>\n<p>Savoir un peu initialiser DirectX.<\/p>\n<p><strong>Exemples : <\/strong><\/p>\n<p>Voici un exemple d&rsquo;utilisation :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\nint WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow )\r\n{\r\n\u00a0\u00a0\u00a0 DXUTSetCallbackD3D10DeviceAcceptable( IsD3D10DeviceAcceptable );\r\n\u00a0\u00a0\u00a0 DXUTSetCallbackD3D10DeviceCreated( OnD3D10CreateDevice );\r\n\u00a0\u00a0\u00a0 DXUTSetCallbackD3D10SwapChainResized( OnD3D10ResizedSwapChain );\r\n\u00a0\u00a0\u00a0 DXUTSetCallbackD3D10SwapChainReleasing( OnD3D10ReleasingSwapChain );\r\n\u00a0\u00a0\u00a0 DXUTSetCallbackD3D10DeviceDestroyed( OnD3D10DestroyDevice );\r\n\u00a0\u00a0\u00a0 DXUTSetCallbackD3D10FrameRender( OnD3D10FrameRender );\r\n\r\n\u00a0\u00a0\u00a0 DXUTSetCallbackMsgProc( MsgProc );\r\n\u00a0\u00a0\u00a0 DXUTSetCallbackKeyboard( OnKeyboard );\r\n\u00a0\u00a0\u00a0 DXUTSetCallbackFrameMove( OnFrameMove );\r\n\u00a0\u00a0\u00a0 DXUTSetCallbackDeviceChanging( ModifyDeviceSettings );\r\n\r\n\u00a0\u00a0\u00a0 DXUTInit( true, true, NULL );\r\n\u00a0\u00a0\u00a0 DXUTSetCursorSettings( true, true );\r\n\u00a0\u00a0\u00a0 DXUTCreateWindow( L&quot;DXUT - Introduction&quot; );\r\n\u00a0\u00a0\u00a0 DXUTCreateDevice( true, 640, 480 );\r\n\u00a0\u00a0\u00a0 DXUTMainLoop();\r\n\r\n\u00a0\u00a0\u00a0 return DXUTGetExitCode();\r\n}\r\n\r\n<\/pre>\n<p>On remarque bien que quelques lignes suffisent pour d\u00e9marrer DirectX 10 avec DXUT.<\/p>\n<p>Vous remarquerez aussi que l&rsquo;on ins\u00e8re des fonctions en tant que param\u00e8tres : ce sont des fonctions callbacks (c&rsquo;est-\u00e0-dire des fonctions qui sont appel\u00e9es de mani\u00e8re interne par DirectX).<\/p>\n<h2><strong> Explications :<\/strong><\/h2>\n<p><strong>Initialisation :<\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\nDXUTInit(bool, bool, WCHAR*, bool);\r\n\r\n<\/pre>\n<p>Le premier argument indique \u00e0 DXUT d&rsquo;interpr\u00eater ou non les arguments pass\u00e9s en ligne de comande :<\/p>\n<p><em>BasicHLSL.exe -windowed -width:400 -height:300<\/em><\/p>\n<p>Le deuxi\u00e8me argument indique \u00e0 DXUT d&rsquo;afficher ou non une boite de dialogue s&rsquo;il une erreur \u00e0 lieu.<\/p>\n<p>Les deux autres arguments ne sont pas n\u00e9cessaires pour comprendre.<\/p>\n<p><strong>Curseur de la souris :<\/strong><\/p>\n<p>Voici l&rsquo;instruction pour configurer le curseur de souris.<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nDXUTSetCursorSettings(bool, bool);\r\n<\/pre>\n<p>Le premier param\u00e8tre indique \u00e0 DXUT que le curseur doit ou non<br \/>\n\u00eatre affich\u00e9e en mode plein \u00e9cran.<\/p>\n<p>Le premier param\u00e8tre indique \u00e0 DXUT que le curseur doit<br \/>\n\u00eatre restreint ou non de traverser les bords de la fen\u00eatre en mode plein \u00e9cran.<\/p>\n<p><strong>Cr\u00e9ation d&rsquo;une fen\u00eatre :<\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\nDXUTCreateWindow(const WCHAR, HINSTANCE, HICON, HMENU, INT, INT);\r\n\r\n<\/pre>\n<p>Le premier argument sp\u00e9cifie le titre de la fen\u00eatre.<\/p>\n<p>Le deuxi\u00e8me argument sp\u00e9cifie l&rsquo;handle de la fen\u00eatre (on peut le mettre \u00e0 NULL).<\/p>\n<p>Le troisi\u00e8me argument sp\u00e9cifie \u00e0 la fen\u00eatre quelle icone utiliser (on peut le mettre \u00e0 NULL aussi).<\/p>\n<p>Les deux autres arguments ne sont pas n\u00e9cessaires pour comprendre.<\/p>\n<p><strong>Cr\u00e9ation du device :<\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\nDXUTCreateDevice(bool, int, int); \r\n\r\n<\/pre>\n<p>Le premier argument indique ou non si la fen\u00eatre cr\u00e9\u00e9e doit \u00eatre en plein \u00e9cran ou fen\u00eatr\u00e9e.<\/p>\n<p>Les deux autres arguments indiquent la r\u00e9solution (au mieux) de la fen\u00eatre de rendu.<\/p>\n<p>Par ailleurs, apr\u00e8s cette instruction, DXUT choisira automatiquement la version de DirectX : D3D9 ou D3D10, selon les capacit\u00e9s du mat\u00e9riel.<\/p>\n<p><strong>Rendu :<\/strong><\/p>\n<p>Au final l&rsquo;Instruction pour d\u00e9marrer la boucle de rendu :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\nDXUTMainLoop();\r\n\r\n<\/pre>\n<p><strong><br \/>\nLes fonctions Callbacks :<\/strong><\/p>\n<p>Maintenant pour utiliser DXUT on doit cr\u00e9er un fichier Callbacks.h o\u00f9 mettrez le code des fonctions n\u00e9cessaire \u00e0 DXUT :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\nID3D10InputLayout* g_pVertexLayout = NULL;\r\n\r\nstruct SimpleVertex\r\n{\r\n\u00a0\u00a0\u00a0 D3DXVECTOR3 Pos;\r\n    D3DXVECTOR3 Colour;\r\n};\r\n\r\nbool CALLBACK IsD3D10DeviceAcceptable(UINT, UINT, D3D10_DRIVER_TYPE,\r\n                                       DXGI_FORMAT, bool, void*);\r\n\r\nHRESULT CALLBACK OnD3D10CreateDevice(ID3D10Device*, const DXGI_SURFACE_DESC*,\r\n                                      void*);\r\n\r\nHRESULT CALLBACK OnD3D10ResizedSwapChain(ID3D10Device*, IDXGISwapChain*,\r\n                                          const DXGI_SURFACE_DESC*, void*);\r\n\r\nvoid CALLBACK OnD3D10FrameRender(ID3D10Device*, double, float, void*);\r\n\r\nvoid CALLBACK OnD3D10ReleasingSwapChain(void*);\r\n\r\nvoid CALLBACK OnD3D10DestroyDevice(void*);\r\n\r\nLRESULT CALLBACK MsgProc(HWND, UINT, WPARAM, LPARAM,\r\n                         bool*, void*);\r\n\r\nvoid CALLBACK OnKeyboard(UINT, bool, bool, void*);\r\n\r\nvoid CALLBACK OnFrameMove(double, float, void*);\r\n\r\nbool CALLBACK ModifyDeviceSettings(DXUTDeviceSettings*, void*);\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Vous mettrez toutes les fonctions \u00e9num\u00e9r\u00e9es ici prochainement dans un fichier DXUTIntroduction.cpp<\/p>\n<p><strong>La premi\u00e8re fonction callback : <\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\n\/\/ N'est pas utilis\u00e9e\r\nbool CALLBACK IsD3D10DeviceAcceptable(UINT Adapter, UINT Output, D3D10_DRIVER_TYPE DeviceType,\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  DXGI_FORMAT BufferFormat, bool bWindowed, void* pUserContext)\r\n{\r\n\u00a0\u00a0\u00a0 return true;\r\n}\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>La deuxi\u00e8me fonction callback :<\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\/\/ Initialize le rendu DirectX\r\nHRESULT CALLBACK OnD3D10CreateDevice(ID3D10Device* pd3dDevice, const DXGI_SURFACE_DESC* pBufferSurfaceDesc,\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 void* pUserContext)\r\n{\r\n\u00a0\u00a0\u00a0 HRESULT hr = S_OK;\r\n\r\n\u00a0\u00a0 \u00a0\/\/ D\u00e9finit le sch\u00e9ma d'entr\u00e9e\r\n\u00a0\u00a0 \u00a0D3D10_INPUT_ELEMENT_DESC layout[] =\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{ &quot;POSITION&quot;, 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 },\r\n\u00a0\u00a0 \u00a0};\r\n\u00a0\u00a0 \u00a0UINT numElements = sizeof(layout) \/ sizeof(layout[0]);\r\n\r\n\u00a0\u00a0 \u00a0\/\/ Cr\u00e9\u00e9 le sch\u00e9ma d'entr\u00e9e\r\n\u00a0\u00a0 \u00a0D3D10_PASS_DESC PassDesc;\r\n\u00a0\u00a0 \u00a0g_pTechnique-&gt;GetPassByIndex(0)-&gt;GetDesc(&amp;PassDesc);\r\n\u00a0\u00a0 \u00a0V_RETURN( pd3dDevice-&gt;CreateInputLayout(layout, numElements, PassDesc.pIAInputSignature,\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 PassDesc.IAInputSignatureSize, &amp;g_pVertexLayout));\r\n\r\n\u00a0\u00a0 \u00a0\/\/ Set the input layout\r\n\u00a0\u00a0 \u00a0pd3dDevice-&gt;IASetInputLayout(g_pVertexLayout);\r\n\r\n\u00a0\u00a0 \u00a0SimpleVertex vertices[] =\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{ D3DXVECTOR3( -1.0f, 1.0f, -1.0f ), D3DXVECTOR4( 0.0f, 0.0f, 1.0f, 1.0f ) },\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{ D3DXVECTOR3( 1.0f, 1.0f, -1.0f ), D3DXVECTOR4( 0.0f, 1.0f, 0.0f, 1.0f ) },\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{ D3DXVECTOR3( 1.0f, 1.0f, 1.0f ), D3DXVECTOR4( 0.0f, 1.0f, 1.0f, 1.0f ) },\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{ D3DXVECTOR3( -1.0f, 1.0f, 1.0f ), D3DXVECTOR4( 1.0f, 0.0f, 0.0f, 1.0f ) },\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{ D3DXVECTOR3( -1.0f, -1.0f, -1.0f ), D3DXVECTOR4( 1.0f, 0.0f, 1.0f, 1.0f ) },\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{ D3DXVECTOR3( 1.0f, -1.0f, -1.0f ), D3DXVECTOR4( 1.0f, 1.0f, 0.0f, 1.0f ) },\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{ D3DXVECTOR3( 1.0f, -1.0f, 1.0f ), D3DXVECTOR4( 1.0f, 1.0f, 1.0f, 1.0f ) },\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{ D3DXVECTOR3( -1.0f, -1.0f, 1.0f ), D3DXVECTOR4( 0.0f, 0.0f, 0.0f, 1.0f ) },\r\n\u00a0\u00a0 \u00a0};\r\n\r\n\u00a0\u00a0 \u00a0D3D10_BUFFER_DESC bd;\r\n\u00a0\u00a0 \u00a0bd.Usage = D3D10_USAGE_DEFAULT;\r\n\u00a0\u00a0 \u00a0bd.ByteWidth = sizeof(SimpleVertex) * 24;\r\n\u00a0\u00a0 \u00a0bd.BindFlags = D3D10_BIND_VERTEX_BUFFER;\r\n\u00a0\u00a0 \u00a0bd.CPUAccessFlags = 0;\r\n\u00a0\u00a0 \u00a0bd.MiscFlags = 0;\r\n\u00a0\u00a0 \u00a0D3D10_SUBRESOURCE_DATA InitData;\r\n\u00a0\u00a0 \u00a0InitData.pSysMem = vertices;\r\n\u00a0\u00a0 \u00a0V_RETURN( pd3dDevice-&gt;CreateBuffer(&amp;bd, &amp;InitData, &amp;g_pVertexBuffer));\r\n\r\n\u00a0\u00a0 \u00a0\/\/ D\u00e9finit le vertex buffer\r\n\u00a0\u00a0 \u00a0UINT stride = sizeof(SimpleVertex);\r\n\u00a0\u00a0 \u00a0UINT offset = 0;\r\n\u00a0\u00a0 \u00a0pd3dDevice-&gt;IASetVertexBuffers(0, 1, &amp;g_pVertexBuffer, &amp;stride, &amp;offset);\r\n\r\n\u00a0\u00a0 \u00a0\/\/ Set primitive topology\r\n\u00a0\u00a0 \u00a0pd3dDevice-&gt;IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST);\r\n\r\n\u00a0\u00a0 \u00a0return S_OK;\r\n}\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>La troisi\u00e8me fonction callback : <\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nHRESULT CALLBACK OnD3D10ResizedSwapChain(ID3D10Device* pd3dDevice, IDXGISwapChain* pSwapChain,\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\u00a0\u00a0 const DXGI_SURFACE_DESC* pBufferSurfaceDesc, void* pUserContext)\r\n{\r\n\u00a0\u00a0\u00a0 return S_OK;\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>La quatri\u00e8me fonction callback :<\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\/\/ Appel\u00e9e \u00e0 chaque \u00e9tape de boucle de rendu\r\nvoid CALLBACK OnD3D10FrameRender(ID3D10Device* pd3dDevice, double fTime,\r\n                                 float fElapsedTime, void* pUserContext)\r\n{\r\n\u00a0\u00a0\u00a0 float ClearColor[4] = { 0.0f, 0.125f, 0.3f, 1.0f };\r\n\u00a0\u00a0\u00a0 ID3D10RenderTargetView* pRTV = DXUTGetD3D10RenderTargetView();\r\n\u00a0\u00a0\u00a0 pd3dDevice-&gt;ClearRenderTargetView( pRTV, ClearColor );\r\n\r\n\u00a0\u00a0\u00a0 ID3D10DepthStencilView* pDSV = DXUTGetD3D10DepthStencilView();\r\n\u00a0\u00a0\u00a0 pd3dDevice-&gt;ClearDepthStencilView( pDSV, D3D10_CLEAR_DEPTH, 1.0, 0 );\r\n\r\n\u00a0\u00a0\u00a0 pd3dDevice-&gt;Draw(3, 0);\r\n}\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>La cinqui\u00e8me fonction callback :<\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\/\/ N'est pas utilis\u00e9e\r\nvoid CALLBACK OnD3D10ReleasingSwapChain(void* pUserContext)\r\n{\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>La sixi\u00e8me fonction callback : <\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\n\/\/ D\u00e9truit les composants de DirectX\r\nvoid CALLBACK OnD3D10DestroyDevice( void* pUserContext )\r\n{\r\n\u00a0\u00a0\u00a0 g_pVertexLayout-&gt;Release();\r\n    g_pVertexLayout = NULL.\r\n}\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>La septi\u00e8me fonction callback :<\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\n\/\/ N'est pas utilis\u00e9e\r\nbool CALLBACK ModifyDeviceSettings( DXUTDeviceSettings* pDeviceSettings, void* pUserContext )\r\n{\r\n\u00a0\u00a0\u00a0 return true;\r\n}\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>La huiti\u00e8me fonction callback :<\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\nLRESULT CALLBACK MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing,\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 void* pUserContext )\r\n{\r\n\u00a0\u00a0\u00a0 return 0;\r\n}\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>La derni\u00e8re fonction callback :<\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\nvoid CALLBACK OnKeyboard( UINT nChar, bool bKeyDown, bool bAltDown, void* pUserContext )\r\n{\r\n\u00a0\u00a0\u00a0 if( bKeyDown )\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 switch( nChar )\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case VK_F1: \/\/ Change as needed\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\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>DXUT vous permet de restreindre d\u2019initialiser de mani\u00e8re laborieuse DirectX 10.<br \/>\nVous pouvez retrouver le code source de ce petit tutoriel ici.<\/p>\n<p><strong>R\u00e9f\u00e9rences :<\/strong><\/p>\n<p>Documentation DirectX SDK June 2010<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Intro : DXUT est un framework qui vous permet d&rsquo;initialiser de mani\u00e8re plus rapide et plus simple DirectX 10 \u00e0 travers des fonctions toutes pr\u00eates. Pr\u00e9requis : Savoir un peu initialiser DirectX. Exemples : Voici un exemple d&rsquo;utilisation : On remarque bien que quelques lignes suffisent pour d\u00e9marrer DirectX 10 avec DXUT. Vous remarquerez aussi [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[7],"tags":[],"_links":{"self":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/234"}],"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=234"}],"version-history":[{"count":143,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/234\/revisions"}],"predecessor-version":[{"id":5193,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/234\/revisions\/5193"}],"wp:attachment":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=234"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=234"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}