免責事項:この記事はブロガーオリジナル記事ですが、許可ブロガーなく再生してはなりません。https://blog.csdn.net/xiaoyafang123/article/details/89637226
各頂点の頂点バッファにデータが含まれ、この項では、静的頂点バッファを初期化する方法について説明し、つまり、頂点バッファは変更されません。非静的バッファを初期化するヘルプについては、備考セクションを参照してください。
静的頂点バッファを初期化します
- 定義は、頂点の構造を説明します。データは、頂点位置データとカラーデータが含まれている場合、例えば、その構造は、他の色ベクトルの位置と説明を記述するベクトルを有することになります。
- (malloc関数または新しいを使用して)最初の工程のために定義されたメモリ構造を割り当て、バッファは、頂点の実際の幾何学的形状を記述するデータで満たされています。
- D3D11_BUFFER_DESC構造を充填することによってバッファを作成します。BindFlags部材、ByteWidthメンバーへの最初のステップからの転送のサイズおよび構造にD3D11_BIND_VERTEX_BUFFERフラグ。
- D3D11_SUBRESOURCE_DATA構造を充填することにより説明子リソースデータを作成します。pSysMemメンバーD3D11_SUBRESOURCE_DATA構造は、ステップ2で作成したリソースデータを対象とする必要があります。
- 関数を呼び出すとD3D11_BUFFER_DESC CreateBufferとD3D11_SUBRESOURCE_DATA ID3D11Bufferインタフェースアドレス構造体を渡すことによって、および初期化します。
次のコード例では、頂点バッファを作成する方法を示します。この例では、有効なID3D11Device g_pd3dDeviceオブジェクトことを想定しています。
ID3D11Buffer* g_pVertexBuffer;
// Define the data-type that
// describes a vertex.
struct SimpleVertexCombined
{
D3DXVECTOR3 Pos;
D3DXVECTOR3 Col;
};
// Supply the actual vertex data.
SimpleVertexCombined verticesCombo[] =
{
D3DXVECTOR3( 0.0f, 0.5f, 0.5f ),
D3DXVECTOR3( 0.0f, 0.0f, 0.5f ),
D3DXVECTOR3( 0.5f, -0.5f, 0.5f ),
D3DXVECTOR3( 0.5f, 0.0f, 0.0f ),
D3DXVECTOR3( -0.5f, -0.5f, 0.5f ),
D3DXVECTOR3( 0.0f, 0.5f, 0.0f ),
};
// Fill in a buffer description.
D3D11_BUFFER_DESC bufferDesc;
bufferDesc.Usage = D3D11_USAGE_DEFAULT;
bufferDesc.ByteWidth = sizeof( SimpleVertexCombined ) * 3;
bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
bufferDesc.CPUAccessFlags = 0;
bufferDesc.MiscFlags = 0;
// Fill in the subresource data.
D3D11_SUBRESOURCE_DATA InitData;
InitData.pSysMem = verticesCombo;
InitData.SysMemPitch = 0;
InitData.SysMemSlicePitch = 0;
// Create the vertex buffer.
hr = g_pd3dDevice->CreateBuffer( &bufferDesc, &InitData, &g_pVertexBuffer );
リマーク
時間をかけて、バッファの初期化頂点いくつかの方法は次のとおり。
- ID3D11DeviceContextを使用して::地図、ID3D11DeviceContext :: UNMAP第2のバッファがいっぱいになる、ID3D11DeviceContextを使用:: COPYRESOURCEコピーステージングDEFAULTバッファをバッファリングするために、第2のバッファをD3D10_USAGE_STAGINGで作成されました。
- ID3D11DeviceContext :: UpdateSubresourceを使用してメモリからデータをコピーします。
- D3D11_USAGE_DYNAMICでバッファを作成し、ID3D11DeviceContext ::地図、ID3D11DeviceContext ::アンマップでそれを埋めます。
#1及び#2は、フレームコンテンツ当たり回未満で変化するのに有用です。一般的に、GPUはより速く、より低速のCPUの更新を読み込みます。
#3の含有量は、各フレームの変化のために複数回に有用です。一般的には、GPUの読み出し速度は遅くなりますが、CPUの更新速度は速くなります。