空のウインドウを表示する

「空のウインドウを表示する」の編集履歴(バックアップ)一覧はこちら

空のウインドウを表示する」(2011/02/23 (水) 22:28:31) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

<p><strong>とりあえず空のウインドウを表示します。<br /> と、言ってもDirectX11の初期化を済ませているのでれっきとした<br /> DirectXのプログラムです。</strong></p> <p> <img alt="" src="http://www43.atwiki.jp/directx11?cmd=upload&amp;act=open&amp;pageid=14&amp;file=init.png" /></p> <table border="1" cellspacing="1" cellpadding="1" width="600"><tbody><tr><td> <p><span style="font-size:small;">#pragma comment(lib,"d3d11.lib")<br /> #pragma comment(lib,"d3dx11.lib")<br /> #include &lt;d3dx11.h&gt;</span></p> <p><span style="font-size:small;">//定数定義<br /> #define WINDOW_WIDTH 320 //ウィンドウ幅<br /> #define WINDOW_HEIGHT 240 //ウィンドウ高さ</span></p> <p><span style="font-size:small;">//グローバル変数<br /> HWND hWnd=NULL;<br /> ID3D11Device* Device = NULL;<br /> ID3D11DeviceContext* DeviceContext=NULL;<br /> IDXGISwapChain* SwapChain = NULL;<br /> ID3D11RenderTargetView* RenderTargetView = NULL;</span></p> <p><span style="font-size:small;">//ダイレクト3Dの初期化関数<br /> HRESULT InitD3D(HWND hWnd)<br /> {<br />  // デバイスとスワップチェーンの作成<br />  DXGI_SWAP_CHAIN_DESC sd;<br />     ZeroMemory( &amp;sd, sizeof(sd) );<br />     sd.BufferCount = 1;         //バックバッファの数<br />     sd.BufferDesc.Width = WINDOW_WIDTH;     //バッファの幅<br />     sd.BufferDesc.Height = WINDOW_HEIGHT;    //バッファの高さ<br />     sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; //バッファのフォーマット<br />     sd.BufferDesc.RefreshRate.Numerator = 60;   //リフレッシュレート<br />     sd.BufferDesc.RefreshRate.Denominator = 1;<br />     sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;<br />     sd.OutputWindow = hWnd;<br />     sd.SampleDesc.Count = 1;<br />     sd.SampleDesc.Quality = 0;<br />     sd.Windowed = TRUE;</span></p> <p><span style="font-size:small;"> D3D_FEATURE_LEVEL  FeatureLevel = D3D_FEATURE_LEVEL_11_0;</span></p> <p><span style="font-size:small;"><br />     if( FAILED( D3D11CreateDeviceAndSwapChain( NULL, D3D_DRIVER_TYPE_REFERENCE, NULL,0,<br />      &amp;FeatureLevel,1,     <br />                      D3D11_SDK_VERSION, &amp;sd, &amp;SwapChain, &amp;Device ,NULL,&amp;DeviceContext) ) )<br />     {<br />         return FALSE;<br />     }<br />  //レンダーターゲットビューの作成<br />  ID3D11Texture2D *BackBuffer;<br />     SwapChain-&gt;GetBuffer( 0, __uuidof( ID3D11Texture2D ),(LPVOID*)&amp;BackBuffer);   <br />     Device-&gt;CreateRenderTargetView( BackBuffer, NULL, &amp;RenderTargetView );<br />     BackBuffer-&gt;Release();<br />  DeviceContext-&gt;OMSetRenderTargets(1, &amp;RenderTargetView,NULL);</span></p> <p><span style="font-size:small;"> //ビューポートの設定<br />  D3D11_VIEWPORT vp;<br />     vp.Width = 400;<br />     vp.Height = 300;<br />     vp.MinDepth = 0.0f;<br />     vp.MaxDepth = 1.0f;<br />     vp.TopLeftX = 0;<br />     vp.TopLeftY = 0;<br />     DeviceContext-&gt;RSSetViewports( 1, &amp;vp );</span></p> <p><span style="font-size:small;"> <br />  return S_OK;<br /> }</span></p> <p><span style="font-size:small;">//レンダリング<br /> VOID Render()<br /> {<br />  float ClearColor[4] = {1,1,1,1 }; // クリア色作成 RGBAの順<br />     DeviceContext-&gt;ClearRenderTargetView( RenderTargetView, ClearColor );//画面クリア   <br />  SwapChain-&gt;Present( 0, 0 );//画面更新(バックバッファをフロントバッファに) <br /> }</span></p> <p><span style="font-size:small;">//終了時解放処理<br /> VOID Cleanup()<br /> {<br />  SwapChain-&gt;Release();<br />  RenderTargetView-&gt;Release();<br />  DeviceContext-&gt;Release();<br />  Device-&gt;Release();<br /> }</span></p> <p><span style="font-size:small;">//メッセージプロシージャ<br /> LRESULT CALLBACK MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)<br /> {<br />  switch(msg)<br />  {<br />   case WM_DESTROY://終了時<br />    Cleanup();<br />    PostQuitMessage(0);<br />    break;<br />  }<br />  return DefWindowProc (hWnd, msg, wParam, lParam);<br /> }</span></p> <p><span style="font-size:small;">//メイン関数<br /> INT WINAPI WinMain( HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR szStr,INT iCmdShow)<br /> {<br />  //ウインドウクラスの登録<br />     WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,<br />                       GetModuleHandle(NULL), NULL, NULL, NULL, NULL,<br />                       L"Window1", NULL };<br />     RegisterClassEx( &amp;wc );<br />  //タイトルバーとウインドウ枠の分を含めてウインドウサイズを設定<br />  RECT rect;<br />  SetRect(&amp;rect,0,0,WINDOW_WIDTH,WINDOW_HEIGHT);<br />  AdjustWindowRect(&amp;rect, WS_OVERLAPPEDWINDOW, FALSE);<br />  rect.right=rect.right-rect.left;<br />  rect.bottom=rect.bottom-rect.top;<br />  rect.top=0;<br />  rect.left=0;<br />      //ウインドウの生成<br />     hWnd = CreateWindow( L"Window1", L"Hello DirectX11 World !!",<br />     WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rect.right, rect.bottom,<br />                               NULL, NULL, wc.hInstance, NULL );<br />  <br />  MSG msg;<br />  ZeroMemory(&amp;msg,sizeof(msg));<br />  //Direct3D初期化<br />     if(SUCCEEDED(InitD3D(hWnd)))<br />     {<br />   //ウインドウ表示<br />   ShowWindow(hWnd,SW_SHOW);<br />   UpdateWindow(hWnd);<br />   while(msg.message!=WM_QUIT)<br />   {<br />    if( PeekMessage(&amp;msg,NULL,0,0,PM_REMOVE))<br />    {<br />     TranslateMessage(&amp;msg);<br />     DispatchMessage(&amp;msg);<br />    }<br />    else<br />    {<br />     Render();<br />    }<br />   }<br />  }</span></p> <p><span style="font-size:small;"> //終了<br />  return 0;<br /> }</span></p> </td> </tr></tbody></table><p> </p>
<p><strong>とりあえず空のウインドウを表示します。<br /> と、言ってもDirectX11の初期化を済ませているのでれっきとした<br /> DirectXのプログラムです。</strong></p> <p> <img alt="" src="http://www43.atwiki.jp/directx11?cmd=upload&amp;act=open&amp;pageid=14&amp;file=init.png" /></p> <table border="1" cellspacing="1" cellpadding="1" width="600"><tbody><tr><td> <p>#pragma comment(lib,"d3d11.lib")<br /> #pragma comment(lib,"d3dx11.lib")<br /> #include &lt;d3dx11.h&gt;</p> <p>//定数定義<br /> #define WINDOW_WIDTH 320 //ウィンドウ幅<br /> #define WINDOW_HEIGHT 240 //ウィンドウ高さ</p> <p>//グローバル変数<br /> HWND hWnd=NULL;<br /> ID3D11Device* Device = NULL;<br /> ID3D11DeviceContext* DeviceContext=NULL;<br /> IDXGISwapChain* SwapChain = NULL;<br /> ID3D11RenderTargetView* RenderTargetView = NULL;</p> <p>//ダイレクト3Dの初期化関数<br /> HRESULT InitD3D(HWND hWnd)<br /> {<br />  // デバイスとスワップチェーンの作成<br />  DXGI_SWAP_CHAIN_DESC sd;<br />     ZeroMemory( &amp;sd, sizeof(sd) );<br />     sd.BufferCount = 1;         //バックバッファの数<br />     sd.BufferDesc.Width = WINDOW_WIDTH;     //バッファの幅<br />     sd.BufferDesc.Height = WINDOW_HEIGHT;    //バッファの高さ<br />     sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; //バッファのフォーマット<br />     sd.BufferDesc.RefreshRate.Numerator = 60;   //リフレッシュレート<br />     sd.BufferDesc.RefreshRate.Denominator = 1;<br />     sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;<br />     sd.OutputWindow = hWnd;<br />     sd.SampleDesc.Count = 1;<br />     sd.SampleDesc.Quality = 0;<br />     sd.Windowed = TRUE;</p> <p> D3D_FEATURE_LEVEL  FeatureLevel = D3D_FEATURE_LEVEL_11_0;</p> <p><br />     if( FAILED( D3D11CreateDeviceAndSwapChain( NULL, D3D_DRIVER_TYPE_REFERENCE, NULL,0,<br />      &amp;FeatureLevel,1,     <br />                      D3D11_SDK_VERSION, &amp;sd, &amp;SwapChain, &amp;Device ,NULL,&amp;DeviceContext) ) )<br />     {<br />         return FALSE;<br />     }<br />  //レンダーターゲットビューの作成<br />  ID3D11Texture2D *BackBuffer;<br />     SwapChain-&gt;GetBuffer( 0, __uuidof( ID3D11Texture2D ),(LPVOID*)&amp;BackBuffer);   <br />     Device-&gt;CreateRenderTargetView( BackBuffer, NULL, &amp;RenderTargetView );<br />     BackBuffer-&gt;Release();<br />  DeviceContext-&gt;OMSetRenderTargets(1, &amp;RenderTargetView,NULL);</p> <p> //ビューポートの設定<br />  D3D11_VIEWPORT vp;<br />     vp.Width = WINDOW_WIDTH;<br />     vp.Height = WINDOW_HEIGHT;<br />     vp.MinDepth = 0.0f;<br />     vp.MaxDepth = 1.0f;<br />     vp.TopLeftX = 0;<br />     vp.TopLeftY = 0;<br />     DeviceContext-&gt;RSSetViewports( 1, &amp;vp );</p> <p> <br />  return S_OK;<br /> }</p> <p>//レンダリング<br /> VOID Render()<br /> {<br />  float ClearColor[4] = {1,1,1,1 }; // クリア色作成 RGBAの順<br />     DeviceContext-&gt;ClearRenderTargetView( RenderTargetView, ClearColor );//画面クリア   <br />  SwapChain-&gt;Present( 0, 0 );//画面更新(バックバッファをフロントバッファに) <br /> }</p> <p>//終了時解放処理<br /> VOID Cleanup()<br /> {<br />  SwapChain-&gt;Release();<br />  RenderTargetView-&gt;Release();<br />  DeviceContext-&gt;Release();<br />  Device-&gt;Release();<br /> }</p> <p>//メッセージプロシージャ<br /> LRESULT CALLBACK MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)<br /> {<br />  switch(msg)<br />  {<br />   case WM_DESTROY://終了時<br />    Cleanup();<br />    PostQuitMessage(0);<br />    break;<br />  }<br />  return DefWindowProc (hWnd, msg, wParam, lParam);<br /> }</p> <p>//メイン関数<br /> INT WINAPI WinMain( HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR szStr,INT iCmdShow)<br /> {<br />  //ウインドウクラスの登録<br />     WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,<br />                       GetModuleHandle(NULL), NULL, NULL, NULL, NULL,<br />                       L"Window1", NULL };<br />     RegisterClassEx( &amp;wc );<br />  //タイトルバーとウインドウ枠の分を含めてウインドウサイズを設定<br />  RECT rect;<br />  SetRect(&amp;rect,0,0,WINDOW_WIDTH,WINDOW_HEIGHT);<br />  AdjustWindowRect(&amp;rect, WS_OVERLAPPEDWINDOW, FALSE);<br />  rect.right=rect.right-rect.left;<br />  rect.bottom=rect.bottom-rect.top;<br />  rect.top=0;<br />  rect.left=0;<br />      //ウインドウの生成<br />     hWnd = CreateWindow( L"Window1", L"Hello DirectX11 World !!",<br />     WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rect.right, rect.bottom,<br />                               NULL, NULL, wc.hInstance, NULL );<br />  <br />  MSG msg;<br />  ZeroMemory(&amp;msg,sizeof(msg));<br />  //Direct3D初期化<br />     if(SUCCEEDED(InitD3D(hWnd)))<br />     {<br />   //ウインドウ表示<br />   ShowWindow(hWnd,SW_SHOW);<br />   UpdateWindow(hWnd);<br />   while(msg.message!=WM_QUIT)<br />   {<br />    if( PeekMessage(&amp;msg,NULL,0,0,PM_REMOVE))<br />    {<br />     TranslateMessage(&amp;msg);<br />     DispatchMessage(&amp;msg);<br />    }<br />    else<br />    {<br />     Render();<br />    }<br />   }<br />  }</p> <p> //終了<br />  return 0;<br /> }</p> </td> </tr></tbody></table><p> </p>

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。