ID3D10Device::CopySubresourceRegion

コピー元リソースからコピー先リソースにリージョンをコピーします。

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

パラメータ

  • pDstResource
    コピー先リソースへのポインターです (「ID3D10Resource」を参照してください)。
  • DstSubresource
    コピー先サブリソースのインデックスです。
  • DstX
    コピー先リージョンの左上隅の x 座標です。
  • DstY
    コピー先リージョンの左上隅の y 座標です。
  • DstZ
    コピー先リージョンの左上隅の z 座標です。「解説」を参照してください。1D および 2D のサブリソースの場合は、ゼロを設定する必要があります。
  • pSrcResource
    コピー元リソースへのポインターです (「ID3D10Resource」を参照してください)。
  • SrcSubresource
    コピー元サブリソースのインデックスです。
  • pSrcBox
    コピー可能なコピー元サブリソースを定義する 3D ボックス (「D3D10_BOX」を参照) です。NULL の場合、コピー元サブリソースの全体がコピーされます。このボックスは、コピー元リソース内に収まっている必要があります。

戻り値

何も返しません。

解説 

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

リソースがバッファーの場合は、すべての座標がバイト単位になります。リソースがテクスチャーの場合は、すべての座標がテクセル単位になります。D3D10CalcSubresource はサブリソースのインデックスを計算するヘルパー関数です。

CopySubresourceRegion は、GPU によってコピーを実行します (CPU による memcpy と似ています)。このため、コピー元とコピー先のリソースには以下の制約が適用されます。

  • 異なるサブリソースである必要があります (ただし、同じリソースに由来するものでもかまいません)。
  • 同じ種類である必要があります。
  • フォーマットの互換性が必要です (同じフォーマット、または同じ種類のグループ)。たとえば、DXGI_FORMAT_R32G32B32_FLOAT テクスチャーを DXGI_FORMAT_R32G32B32_UINT テクスチャーにコピーできますが、その理由は、この 2 つのフォーマットが DXGI_FORMAT_R32G32B32_TYPELESS グループに属しているためです。
  • 現在はマップを行うことはできません。

CopySubresourceRegion では、単なるコピーのみがサポートされ、引き伸ばし、カラー キー、ブレンド、フォーマット変換はサポートされません。リソース全体をコピーする必要があるアプリケーションでは、代わりに ID3D10Device::CopyResource を使用してください。

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

Direct3D 10 と Direct3D 10.1 の違い

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

  • 深度ステンシル リソースはコピー先にできません。
  • 固定リソースはコピー先にできません。
  • マルチサンプル テクスチャーはコピー元にもコピー先にもできません。

Direct3D 10.1 では、次のサポートが追加されます。

  • 深度ステンシル バッファー、またはマルチサンプル リソースをコピー元またはコピー先にできます。
  • 非圧縮リソースと圧縮リソースとの間のコピーが可能です。コピー時に次のフォーマット変換が自動的にサポートされます (「Direct3D 10.1 を使用したフォーマット変換」を参照してください)。非圧縮リソースは、少なくとも事前に構造化され、型が決定されている必要があります。また、ミップマップ レベルの仮想サイズと物理サイズの違いを考慮する必要があります。

次のコードは、コピー元リージョン ((120,100),(200,220)) をコピー先リージョン ((130,120),(210,240)) にコピーします。

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

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

2D テクスチャーの場合は、前面および背面がそれぞれ 0 および 1 に設定されます。

要件

ヘッダー: D3D10.h 宣言

関連項目

ID3D10Resource インターフェイス