次の方法で共有


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場合は、ソース サブリソース全体がコピーされます。 ボックスはソース リソース内に収まる必要があります。

ボックスが空の場合、no-opになります。 上の値が下の値以上の場合、または左の値が右の値以上であるか、前面の値が戻り値以上の場合、ボックスは空になります。 ボックスが空の場合、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を使用した 形式変換」を参照してください。

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

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

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

必要条件

要件 価値
ターゲット プラットフォーム の ウィンドウズ
ヘッダー d3d11.h
ライブラリ D3D11.lib

関連項目

ID3D11DeviceContext

ID3D11Resource