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 子資源,這必須是零。

[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_UINT紋理,因為這些格式都位於DXGI_FORMAT_R32G32B32_TYPELESS群組中。 從 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 進行格式轉換中指定的格式 轉換。 未壓縮的資源至少必須是預先結構化且已輸入。 您也必須考慮 mipmap 層級的虛擬和實體大小之間的差異。
 
注意 如果您使用 CopySubresourceRegion 搭配深度樣板緩衝區或多重取樣資源,則必須複製整個子資源。 您也必須將 0 傳遞給 DstXDstYDstZ 參數,並將 NULL 傳遞給 pSrcBox 參數。 此外,分別由 pSrcResourcepDstResource 參數表示的來源和目的地資源必須具有相同的樣本計數值。
 

例子

下列代碼段會將 (位於 (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
程式庫 D3D10.lib

另請參閱

ID3D10Device

ID3D10Resource 介面