方法:定数バッファーの作成

定数バッファーには、シェーダー定数データが格納されます。ここでは、レンダリングの準備のために定数バッファーを初期化する方法について説明します。

定数バッファーを初期化するには

  1. 定数データを記述する構造体を定義します。

  2. D3D11_BUFFER_DESC 構造体に値を競って値して、バッファーの記述を作成します。D3D11_BIND_CONSTANT_BUFFER フラグを BindFlags メンバーに渡し、この定数バッファーを記述した構造体のサイズ (バイト) を ByteWidth メンバーに渡します。

    D3D11_BIND_CONSTANT_BUFFER フラグを他のフラグと組み合わせて使用することはできません。

  3. D3D11_BUFFER_DESC 構造体、D3D11_SUBRESOURCE_DATA 構造体、および初期化する ID3D11Buffer インターフェイスのポインターのアドレスを指定して、ID3D11Device::CreateBuffer を呼び出します。

次のコード例は、定数バッファーを作成する方法を示しています。この例では、g_pd3dDevice が有効な ID3D11Device オブジェクトであり、g_pd3dContext が有効な ID3D11DeviceContext オブジェクトであることを前提としています。

 ID3D11Buffer*   g_pConstantBuffer11 = NULL;  // Define the constant data used to communicate with shaders. struct VS_CONSTANT_BUFFER {     D3DXMATRIX mWorldViewProj;                                   D3DXVECTOR4 vSomeVectorThatMayBeNeededByASpecificShader;     float fSomeFloatThatMayBeNeededByASpecificShader;     float fTime;                                                 float fSomeFloatThatMayBeNeededByASpecificShader2;     float fSomeFloatThatMayBeNeededByASpecificShader3; };  // Fill in a buffer description. D3D11_BUFFER_DESC cbDesc; cbDesc.ByteWidth = sizeof( VS_CONSTANT_BUFFER ); cbDesc.Usage = D3D11_USAGE_DYNAMIC; cbDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; cbDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; cbDesc.MiscFlags = 0; cbDesc.StructureByteStride = 0;  // Create the buffer. hr = g_pd3dDevice->CreateBuffer( &cbDesc, NULL,                                   &g_pConstantBuffer11 );  if( FAILED( hr ) )    return hr;  // Set the buffer. g_pd3dContext->VSSetConstantBuffers( 0, 1, &g_pConstantBuffer11 );     

関連項目

バッファー