方法 :デバイスとイミディエイト コンテキストの作成

デバイスの初期化は、アプリケーションでシーンをレンダリングする前に実行することが必要な最初のタスクの 1 つです。

デバイスとイミディエイト コンテキストを作成するには

  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;
    
  2. 手順 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; } 
    
  3. 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 ); 
    
  4. ビューポートを作成して、レンダー ターゲットのどの部分を可視にするかを定義します。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 );
    

関連項目

デバイス