ID3D11DeviceContext::CopySubresourceRegion メソッド (d3d11.h)
ソース リソースからターゲット リソースにリージョンをコピーします。
構文
void CopySubresourceRegion(
[in] ID3D11Resource *pDstResource,
[in] UINT DstSubresource,
[in] UINT DstX,
[in] UINT DstY,
[in] UINT DstZ,
[in] ID3D11Resource *pSrcResource,
[in] UINT SrcSubresource,
[in, optional] const D3D11_BOX *pSrcBox
);
パラメーター
[in] pDstResource
種類: ID3D11Resource*
宛先リソースへのポインター ( ID3D11Resource を参照)。
[in] DstSubresource
型: UINT
変換先サブリソース インデックス。
[in] DstX
型: UINT
変換先領域の左上隅の x 座標。
[in] DstY
型: UINT
宛先領域の左上隅の y 座標。 1D サブリソースの場合、これは 0 である必要があります。
[in] DstZ
型: UINT
ターゲット領域の左上隅の z 座標。 1D または 2D サブリソースの場合、これは 0 である必要があります。
[in] pSrcResource
種類: ID3D11Resource*
ソース リソースへのポインター ( 「ID3D11Resource」を参照)。
[in] SrcSubresource
型: UINT
ソース サブリソース インデックス。
[in, optional] pSrcBox
型: const D3D11_BOX*
コピーできるソース サブリソースを定義する 3D ボックスへのポインター ( D3D11_BOX参照)。 NULL の場合、ソース サブリソース全体がコピーされます。 ボックスはソース リソース内に収まる必要があります。
空のボックスを使用すると、操作が不要になります。 上の値が下の値以上であるか、左の値が右の値以上であるか、前面の値が戻り値以上の場合、ボックスは空です。 ボックスが空の場合、 CopySubresourceRegion はコピー操作を実行しません。
戻り値
なし
解説
ソース ボックスは、ソース リソースのサイズ内にある必要があります。 変換先のオフセット (x、y、z) を使用すると、変換先リソースに書き込むときにソース ボックスをオフセットできます。ただし、ソース ボックスとオフセットのディメンションは、リソースのサイズ内である必要があります。 コピー先リソースの外部でコピーを実行するか、ソース リソースよりも大きいソース ボックスを指定すると、 CopySubresourceRegion の動作は未定義になります。 デバッグ レイヤーをサポートするデバイスを作成した場合、デバッグ出力は、この無効な CopySubresourceRegion 呼び出しでエラーを報告します。 CopySubresourceRegion に無効なパラメーターを指定すると、未定義の動作が発生し、レンダリング、クリッピング、コピーなし、またはレンダリング デバイスの削除が発生する可能性があります。
リソースがバッファーの場合、すべての座標はバイト単位です。リソースがテクスチャの場合、すべての座標はテクセル内にあります。 D3D11CalcSubresource は、サブリソース インデックスを計算するためのヘルパー関数です。
CopySubresourceRegion は GPU でコピーを実行します (CPU による memcpy に似ています)。 その結果、ソースリソースと移行先リソースは次のようになります。
- 異なるサブリソースである必要があります (ただし、同じリソースから取得できます)。
- 同じ型である必要があります。
- 互換性のある DXGI 形式 (同じまたは同じ種類のグループ) を持っている必要があります。 たとえば、DXGI_FORMAT_R32G32B32_FLOAT テクスチャは、両方の形式が DXGI_FORMAT_R32G32B32_TYPELESS グループ内に存在するため、DXGI_FORMAT_R32G32B32_UINT テクスチャにコピーできます。 CopySubresourceRegion は、いくつかの形式の種類間でコピーできます。 詳細については、「 Direct3D 10.1 を使用した変換の書式設定」を参照してください。
- 現在マップされていない可能性があります。
アプリでリソース全体をコピーする必要がある場合は、代わりに ID3D11DeviceContext::CopyResource を使用することをお勧めします。
CopySubresourceRegion は非同期呼び出しであり、コマンド バッファー キューに追加される可能性があります。これにより、データのコピー時に発生する可能性があるパイプライン の停止を削除しようとします。 パイプラインの停止の詳細については、「パフォーマンスに 関する考慮事項」を参照してください。
例
次のコード スニペットは、(120,100)、(200,220) にある) ボックスをソース テクスチャからコピー先テクスチャの領域 (10,20)、(90,140) にコピーします。D3D11_BOX sourceRegion;
sourceRegion.left = 120;
sourceRegion.right = 200;
sourceRegion.top = 100;
sourceRegion.bottom = 220;
sourceRegion.front = 0;
sourceRegion.back = 1;
pd3dDeviceContext->CopySubresourceRegion( pDestTexture, 0, 10, 20, 0, pSourceTexture, 0, &sourceRegion );
2D テクスチャの場合、前面と背面はそれぞれ 0 と 1 に設定されていることに注意してください。
要件
要件 | 値 |
---|---|
対象プラットフォーム | Windows |
ヘッダー | d3d11.h |
Library | D3D11.lib |