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

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

空のウインドウを表示する - (2011/02/20 (日) 11:58:17) のソース

<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>
ツールボックス

下から選んでください:

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