Share via


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

このトピックでは、デバイスを初期化する方法について説明 しますデバイスの初期化は、シーンをレンダリングする前にアプリケーションが完了する必要がある最初のタスクの 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;
}

Note

Direct3D 11.0 ランタイムのみを使用するコンピューターで D3D_FEATURE_LEVEL_11_1 デバイスを要求すると、 D3D11CreateDeviceAndSwapChainE_INVALIDARGですぐに終了します。 DirectX 11.0 または DirectX 11.1 ランタイムを使用するコンピューターで考えられるすべての機能レベルを安全に要求するには、次のコードを使用します。

const D3D_FEATURE_LEVEL lvl[] = { D3D_FEATURE_LEVEL_11_1, D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0, D3D_FEATURE_LEVEL_9_3, D3D_FEATURE_LEVEL_9_2, D3D_FEATURE_LEVEL_9_1 };

UINT createDeviceFlags = 0;createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUGを#ifdef _DEBUGします。#endif

ID3D11Device* device = nullptr;HRESULT hr = D3D11CreateDeviceAndSwapChain( nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, createDeviceFlags, lvl, _countof(lvl), D3D11_SDK_VERSION, sd、&g_pSwapChain、&g_pd3ddevice、&FeatureLevelsSupported、&g_pImmediateContext );if ( hr == E_INVALIDARG ) { hr = D3D11CreateDeviceAndSwapChain( nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, createDeviceFlags, &lvl[1], _countof(lvl) - 1, D3D11_SDK_VERSION, sd, &&g_pSwapChain, g_pd3ddevice, &&&FeatureLevelsSupported、&g_pImmediateContext );}

if (FAILED(hr)) return hr;

 

ID3D11Device::CreateRenderTargetView を呼び出してレンダー ターゲット ビューを作成し、ID3D11DeviceContext::OMSetRenderTargets を呼び出して、バックバッファーをレンダー ターゲットとしてバインドします。

ID3D11Texture2D* pBackBuffer;

バック バッファー hr = g_pSwapChain-GetBuffer>( 0, __uuidof( ID3D11Texture2D ), ( LPVOID* )pBackBuffer )&;

render-target ビュー g_pd3dDevice-CreateRenderTargetView>( pBackBuffer, NULL, &g_pRenderTargetView );

// Bind the view g_pImmediateContext->OMSetRenderTargets( 1, &g_pRenderTargetView, NULL );

ビューポートを作成して、レンダー ターゲットのどの部分を表示するかを定義します。 D3D11_VIEWPORT構造体を使用してビューポートを定義し、ID3D11DeviceContext::RSSetViewports メソッドを使用してビューポートを設定します。

C++
    // 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 );

デバイス

Direct3D 11 の使用方法

> >   > >   >