方法 :デバイスとイミディエイト コンテキストの作成
デバイスの初期化は、アプリケーションでシーンをレンダリングする前に実行することが必要な最初のタスクの 1 つです。
デバイスとイミディエイト コンテキストを作成するには
DXGI_SWAP_CHAIN_DESC 構造体にバッファーのフォーマットとサイズに関する情報を設定します。詳細については、「スワップ チェーンの作成」を参照してください。
次のコード例は、DXGI_SWAP_CHAIN_DESC 構造体に情報を設定する方法を示しています。
DXGI_SWAP_CHAIN_DESC sd; ZeroMemory( &sd, sizeof( sd ) ); sd.BufferCount = 1; sd.BufferDesc.Width = 640; sd.BufferDesc.Height = 480; sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; sd.BufferDesc.RefreshRate.Numerator = 60; sd.BufferDesc.RefreshRate.Denominator = 1; sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; sd.OutputWindow = g_hWnd; sd.SampleDesc.Count = 1; sd.SampleDesc.Quality = 0; sd.Windowed = TRUE;
手順 1 の DXGI_SWAP_CHAIN_DESC 構造体を使用して D3D11CreateDeviceAndSwapChain 構造体を呼び出し、デバイスとスワップ チェーンを同時に初期化します。
D3D_FEATURE_LEVEL FeatureLevelsRequested = D3D_FEATURE_LEVEL_11_0; UINT numLevelsRequested = 1; D3D_FEATURE_LEVEL FeatureLevelsSupported; if( FAILED (hr = D3D11CreateDeviceAndSwapChain( NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, &FeatureLevelsRequested, numFeatureLevelsRequested, D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, &FeatureLevelsSupported, &g_pImmediateContext ))) { return hr; }
ID3D11Device::CreateRenderTargetView を呼び出してレンダー ターゲット ビューを作成し、ID3D11DeviceContext::OMSetRenderTargets を呼び出してバック バッファーをレンダー ターゲットとしてバインドします。
ID3D11Texture2D* pBackBuffer; // Get a pointer to the back buffer hr = g_pSwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D ), ( LPVOID* )&pBackBuffer ); // Create a render-target view g_pd3dDevice->CreateRenderTargetView( pBackBuffer, NULL, &g_pRenderTargetView ); // Bind the view g_pImmediateContext->OMSetRenderTargets( 1, &g_pRenderTargetView, NULL );
ビューポートを作成して、レンダー ターゲットのどの部分を可視にするかを定義します。D3D11_VIEWPORT 構造体を使用してビューポートを定義し、ID3D11DeviceContext::RSSetViewports メソッドを使用してビューポートを設定します。
// Setup the viewport D3D11_VIEWPORT vp; vp.Width = 640; vp.Height = 480; vp.MinDepth = 0.0f; vp.MaxDepth = 1.0f; vp.TopLeftX = 0; vp.TopLeftY = 0; g_pImmediateContext->RSSetViewports( 1, &vp );