ID3D10Device::CopySubresourceRegion メソッド (d3d10.h)

ソース リソースからターゲット リソースにリージョンをコピーします。

構文

void CopySubresourceRegion(
  [in] ID3D10Resource  *pDstResource,
  [in] UINT            DstSubresource,
  [in] UINT            DstX,
  [in] UINT            DstY,
  [in] UINT            DstZ,
  [in] ID3D10Resource  *pSrcResource,
  [in] UINT            SrcSubresource,
  [in] const D3D10_BOX *pSrcBox
);

パラメーター

[in] pDstResource

種類: ID3D10Resource*

宛先リソースへのポインター ( 「ID3D10Resource」を参照)。

[in] DstSubresource

型: UINT

変換先のサブリソース インデックス。

[in] DstX

型: UINT

変換先領域の左上隅の x 座標。

[in] DstY

型: UINT

宛先領域の左上隅の y 座標。

[in] DstZ

型: UINT

ターゲット領域の左上隅の z 座標。 1D または 2D サブリソースの場合、これは 0 である必要があります。

[in] pSrcResource

種類: ID3D10Resource*

ソース リソースへのポインター ( 「ID3D10Resource」を参照)。

[in] SrcSubresource

型: UINT

ソースのサブリソース インデックス。

[in] pSrcBox

型: const D3D10_BOX*

コピーできるソース サブリソースを定義する 3D ボックス ( D3D10_BOX参照)。 NULL の場合、ソース サブリソース全体がコピーされます。 ボックスはソース リソース内に収まる必要があります。

空のボックスを使用すると、操作が不要になります。 上の値が下の値以上であるか、左の値が右の値以上であるか、前面の値が戻り値以上の場合、ボックスは空です。 ボックスが空の場合、 CopySubresourceRegion はコピー操作を実行しません。

戻り値

なし

解説

ソース ボックスは、ソース リソースのサイズ内にある必要があります。 変換先の場所は絶対値です (相対値ではありません)。 変換先の場所は、ソースの場所からオフセットできます。ただし、コピーするリージョンのサイズ (コピー先の場所を含む) は、コピー先リソースに収まる必要があります。

リソースがバッファーの場合、すべての座標はバイト単位です。リソースがテクスチャの場合、すべての座標はテクセル内にあります。

D3D10CalcSubresource は、サブリソース インデックスを計算するためのヘルパー関数です。

CopySubresourceRegion は GPU でコピーを実行します (CPU による memcpy に似ています)。 その結果、ソース リソースと移行先リソースは次の条件を満たす必要があります。

  • 異なるサブリソースである必要があります (ただし、同じリソースから取得できます)。
  • 同じ である必要があります。
  • 互換性のある 形式 を持つ必要があります (形式は同一であるか、同じ型グループの形式である必要があります)。 たとえば、DXGI_FORMAT_R32G32B32_FLOAT テクスチャは、両方の形式が DXGI_FORMAT_R32G32B32_TYPELESS グループ内にあるため、DXGI_FORMAT_R32G32B32_UINT テクスチャにコピーできます。 Direct3D 10.1 以降では、 CopySubresourceRegion は、いくつかの形式の種類間でコピーできます。 詳細については、「 Direct3D 10.1 を使用した変換の書式設定」を参照してください。
  • 現在 マップされていない可能性があります。
CopySubresourceRegion では、コピーのみがサポートされます。ストレッチ、カラー キー、ブレンド、または書式変換はサポートされていません。 Direct3D 10.1 以降では、 CopySubresourceRegion では、いくつかの形式の種類の間でリソース データを再解釈できます。 詳細については、「 Direct3D 10.1 を使用した変換の書式設定」を参照してください。

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

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

Direct3D 10 と Direct3D 10.1 の違い:

Direct3D 10 には、次の制限があります。

  • 深度ステンシル リソースを変換先として使用することはできません。
  • 変更できないリソースを宛先として使用することはできません。
  • マルチサンプリング テクスチャをソースまたは宛先として使用することはできません
Direct3D 10.1 では、次の機能のサポートが追加されました。
  • 深度ステンシル バッファーは、ソースまたは変換先として使用できます。
  • ソースと宛先の両方に同じマルチサンプリング数と品質がある場合にのみ、マルチサンプリングされたリソースをソースと宛先として使用できます。 ソースと宛先がマルチサンプリングの数と品質で異なる場合、またはソースがマルチサンプリングで宛先がマルチサンプリングされていない (またはその逆) 場合、 ID3D10Device::CopySubresourceRegion の呼び出しは失敗します。
  • 圧縮されていないリソースと圧縮されたリソースの間でコピーできます。 コピー中に、 Direct3D 10.1 を使用した書式変換 で指定された書式変換が自動的にサポートされます。 非圧縮リソースは、少なくとも事前構造化され、型指定されている必要があります。 また、ミップマップ レベルの仮想サイズと物理サイズの違いについても考慮する必要があります。
 
メモ 深度ステンシル バッファーまたはマルチサンプリング リソースで CopySubresourceRegion を使用する場合は、サブリソース全体をコピーする必要があります。 また、0 を DstXDstYDstZ パラメーターに渡し、 NULL をpSrcBox パラメーターに渡す必要があります。 さらに、pSrcResource パラメーターと pDstResource パラメーターでそれぞれ表されるソース リソースと宛先リソースは、同じサンプルカウント値を持つ必要があります。
 

次のコード スニペットは、(120,100)、(200,220)にある) ボックスをソース テクスチャからコピー先テクスチャの領域 (130,120)、(210,240) にコピーします。

D3D10_BOX sourceRegion;
sourceRegion.left = 120;
sourceRegion.right = 200;
sourceRegion.top = 100;
sourceRegion.bottom = 220;
sourceRegion.front = 0;
sourceRegion.back = 1;

pd3dDevice->CopySubresourceRegion( pDestTexture, 0, 130, 120, 0, pSourceTexture, 0, &sourceRegion );

2D テクスチャの場合、前面と背面はそれぞれ常に 0 と 1 に設定されます。

要件

要件
対象プラットフォーム Windows
ヘッダー d3d10.h
Library D3D10.lib

こちらもご覧ください

ID3D10Device

ID3D10Resource インターフェイス