次の方法で共有


ID3D11DeviceContext::CopySubresourceRegion

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

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

パラメータ

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

戻り値

何も返しません。

解説 

コピー元のボックスは、コピー元リソースのサイズ以内である必要があります。コピー先のオフセット (x、y、および z) を指定して、コピー先リソースへの書き込み時にコピー元ボックスをオフセットできます。ただし、コピー元ボックスとオフセットのサイズはリソースのサイズ以内に収まっている必要があります。

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

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

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

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

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

以下のコードは、コピー元テクスチャーの中で (120,100),(200,220) の位置にあるボックスを、コピー先テクスチャーの中でオフセット位置 (10,20) にある 領域 (130,120),(210,240) にコピーします。

 D3D11_BOX sourceRegion; box.left = 120; box.right = 200; box.top = 100; box.bottom = 220; box.front = 0; box.back = 1;  pd3dDevice->CopySubresourceRegion( pDestTexture, 0, 10, 20, 0, pSourceTexture, 0, &sourceRegion ); 

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

要件

ヘッダー: D3D11.h 宣言

ライブラリ: D3D11.lib 内容

関連項目

ID3D11Resource