<p><strong>とりあえず空のウインドウを表示します。<br /> と、言ってもDirectX11の初期化を済ませているのでれっきとした<br /> DirectXのプログラムです。</strong></p> <p> <img alt="" src="http://www43.atwiki.jp/directx11?cmd=upload&act=open&pageid=14&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 <d3dx11.h></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( &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 /> &FeatureLevel,1, <br /> D3D11_SDK_VERSION, &sd, &SwapChain, &Device ,NULL,&DeviceContext) ) )<br /> {<br /> return FALSE;<br /> }<br /> //レンダーターゲットビューの作成<br /> ID3D11Texture2D *BackBuffer;<br /> SwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D ),(LPVOID*)&BackBuffer); <br /> Device->CreateRenderTargetView( BackBuffer, NULL, &RenderTargetView );<br /> BackBuffer->Release();<br /> DeviceContext->OMSetRenderTargets(1, &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->RSSetViewports( 1, &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->ClearRenderTargetView( RenderTargetView, ClearColor );//画面クリア <br /> SwapChain->Present( 0, 0 );//画面更新(バックバッファをフロントバッファに) <br /> }</span></p> <p><span style="font-size:small;">//終了時解放処理<br /> VOID Cleanup()<br /> {<br /> SwapChain->Release();<br /> RenderTargetView->Release();<br /> DeviceContext->Release();<br /> Device->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( &wc );<br /> //タイトルバーとウインドウ枠の分を含めてウインドウサイズを設定<br /> RECT rect;<br /> SetRect(&rect,0,0,WINDOW_WIDTH,WINDOW_HEIGHT);<br /> AdjustWindowRect(&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(&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(&msg,NULL,0,0,PM_REMOVE))<br /> {<br /> TranslateMessage(&msg);<br /> DispatchMessage(&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>