次の方法で共有


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 を使用した変換の書式設定」を参照してください。
  • 現在マップされていない可能性があります。
**CopySubresourceRegion** はコピーのみをサポートします。ストレッチ、カラー キー、ブレンドはサポートされていません。 **CopySubresourceRegion** では、いくつかの形式の種類の間でリソース データを再解釈できます。 詳細については、「Direct3D 10.1 を使用した形式変換](/windows/win32/direct3d10/d3d10-graphics-programming-guide-resources-block-compression#format-conversion-using-direct3d-101)」を参照してください。

アプリでリソース全体をコピーする必要がある場合は、代わりに ID3D11DeviceContext::CopyResource を使用することをお勧めします。

CopySubresourceRegion は非同期呼び出しであり、コマンド バッファー キューに追加される可能性があります。これにより、データのコピー時に発生する可能性があるパイプライン の停止を削除しようとします。 パイプラインの停止の詳細については、「パフォーマンスに 関する考慮事項」を参照してください。

ハードウェア9_x機能レベルにのみ適用されますID3D11DeviceContext::UpdateSubresource または CopySubresourceRegion を使用してステージング リソースから既定のリソースにコピーすると、コピー先のコンテンツが破損する可能性があります。 これは、 NULL ソース ボックスを渡し、ソース リソースのディメンションがターゲット リソースのディメンションと異なる場合、または変換先のオフセット (x、y、z) を使用する場合に発生します。 このような場合は、ソース リソースのフル サイズであるソース ボックスを常に渡します。
 
注:ハードウェア9_x機能レベルにのみ適用されます。CopySubresourceRegion を使用して mipmapped ボリューム テクスチャをコピーすることはできません。
 
メモ D3D11_BIND_DEPTH_STENCIL フラグを使用して作成されたサブリソース9_x機能レベルにのみ適用され、CopySubresourceRegion のソースとしてのみ使用できます。
 
メモ 深度ステンシル バッファーまたはマルチサンプリング リソースで CopySubresourceRegion を使用する場合は、サブリソース全体をコピーする必要があります。 このような場合は、0 を DstXDstYDstZ パラメーターに渡し、 NULL をpSrcBox パラメーターに渡す必要があります。 さらに、pSrcResource パラメーターと pDstResource パラメーターで表されるソース リソースと変換先リソースは、同じサンプルカウント値を持つ必要があります。
 

次のコード スニペットは、(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

こちらもご覧ください

ID3D11DeviceContext

ID3D11Resource