ID3D11DeviceContext::CopySubresourceRegion
コピー元リソースからコピー先リソースにリージョンをコピーします。
void
CopySubresourceRegion(
ID3D11Resource *pDstResource,
UINT DstSubresource,
UINT DstX,
UINT DstY,
UINT DstZ,
ID3D11Resource *pSrcResource,
UINT SrcSubresource,
const D3D11_BOX *pSrcBox
);
パラメータ
- pDstResource
コピー先リソースへのポインターです (「ID3D11Resource」を参照してください)。 - DstSubresource
コピー先サブリソースのインデックスです。 - DstX
コピー元のボックスの場所とコピー先の場所との x オフセットです。 - DstY
コピー元のボックスの場所とコピー先の場所との y オフセットです。1D のサブリソースの場合は、ゼロを設定する必要があります。 - DstZ
コピー元のボックスの場所とコピー先の場所との z オフセットです。「解説」を参照してください。1D および 2D のサブリソースの場合は、ゼロを設定する必要があります。 - pSrcResource
コピー元リソースへのポインターです (「ID3D11Resource」を参照してください)。 - SrcSubresource
コピー元サブリソースのインデックスです。 - pSrcBox
コピー可能なコピー元サブリソースを定義する 3D ボックス (「D3D11_BOX」を参照) です。NULL の場合、コピー元サブリソースの全体がコピーされます。このボックスは、コピー元リソース内に収まっている必要があります。
戻り値
何も返しません。
解説
コピー元のボックスは、コピー元リソースのサイズ以内である必要があります。コピー先のオフセット (x、y、および z) を指定して、コピー先リソースへの書き込み時にコピー元ボックスをオフセットできます。ただし、コピー元ボックスとオフセットのサイズはリソースのサイズ以内に収まっている必要があります。
リソースがバッファーの場合は、すべての座標がバイト単位になります。リソースがテクスチャーの場合は、すべての座標がテクセル単位になります。D3D11CalcSubresource はサブリソースのインデックスを計算するヘルパー関数です。
CopySubresourceRegion は、GPU によってコピーを実行します (CPU による memcpy と似ています)。このため、コピー元とコピー先のリソースには以下の制約が適用されます。
- 異なるサブリソースである必要があります (ただし、同じリソースに由来するものでもかまいません)。
- 同じ種類である必要があります。
- 互換性のある DXGI フォーマットであることが必要です (同じフォーマットまたは同じタイプのグループ)。たとえば、DXGI_FORMAT_R32G32B32_FLOAT テクスチャーを DXGI_FORMAT_R32G32B32_UINT テクスチャーにコピーできますが、その理由は、この 2 つのフォーマットが DXGI_FORMAT_R32G32B32_TYPELESS グループに属しているためです。
- 現在はマップを行うことはできません。
CopySubresourceRegion では、単なるコピーのみがサポートされ、引き伸ばし、カラー キー、ブレンド、フォーマット変換はサポートされません。リソース全体をコピーする必要があるアプリケーションでは、代わりに ID3D11DeviceContext::CopyResource を使用してください。
CopySubresourceRegion は、コマンド バッファー キューへの追加が可能な非同期呼び出しです。データのコピー時に発生する可能性のあるパイプライン ストールの排除が試行されます。詳細については、「パフォーマンスに関する考慮事項」を参照してください。
例
以下のコードは、コピー元テクスチャーの中で (120,100),(200,220) の位置にあるボックスを、コピー先テクスチャーの中でオフセット位置 (10,20) にある 領域 (130,120),(210,240) にコピーします。
D3D11_BOX sourceRegion; box.left = 120; box.right = 200; box.top = 100; box.bottom = 220; box.front = 0; box.back = 1; pd3dDevice->CopySubresourceRegion( pDestTexture, 0, 10, 20, 0, pSourceTexture, 0, &sourceRegion );
2D テクスチャーの場合は、前面および背面がそれぞれ 0 および 1 に設定されます。
要件
ヘッダー: D3D11.h 宣言
ライブラリ: D3D11.lib 内容