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 子資源,這必須是零。
[in] DstZ
類型: UINT
目的地區域左上角的 z 座標。 如果是 1D 或 2D 子資源,這必須是零。
[in] pSrcResource
類型: ID3D11Resource*
來源資源的指標 (請參閱 ID3D11Resource) 。
[in] SrcSubresource
類型: UINT
來源子資源索引。
[in, optional] pSrcBox
類型: const D3D11_BOX*
3D 方塊的指標 (請參閱定義可複製的來源子資源 D3D11_BOX) 。 如果 為 NULL,則會複製整個來源子資源。 方塊必須符合來源資源。
空的方塊會產生無作業。 如果頂端值大於或等於底部值,或左值大於或等於右值,或前端值大於或等於上一個值,則方塊是空的。 當方塊是空的時, CopySubresourceRegion 不會執行複製作業。
傳回值
無
備註
來源方塊必須位於來源資源的大小內。 目的地位移、 (x、y 和 z) ,可讓來源方塊在寫入目的地資源時位移;不過,來源方塊和位移的維度必須位於資源的大小內。 如果您嘗試並複製目的地資源外部,或指定大於來源資源的來源方塊, 則 CopySubresourceRegion 的行為是未定義的。 如果您建立了支持 偵錯層的裝置,偵錯輸出會報告這個無效 CopySubresourceRegion 呼叫的錯誤。 CopySubresourceRegion 的參數無效會導致未定義的行為,而且可能會導致不正確的轉譯、裁剪、沒有複製,或甚至移除轉譯裝置。
如果資源是緩衝區,則所有座標都是位元組;如果資源是紋理,則所有座標都是材質。 D3D11CalcSubresource 是用來計算子資源索引的協助程式函式。
CopySubresourceRegion 會在 GPU (上執行複本,類似於 CPU) 的 memcpy。 因此,來源和目的地資源:
- 雖然子資源可以來自相同的資源) ,但必須是不同的子資源 (。
- 必須是相同的類型。
- 必須有相容的 DXGI 格式 (相同或來自相同類型群組) 。 例如,DXGI_FORMAT_R32G32B32_FLOAT紋理可以複製到DXGI_FORMAT_R32G32B32_UINT紋理,因為這兩種格式都位於DXGI_FORMAT_R32G32B32_TYPELESS群組中。 CopySubresourceRegion 可以在幾個格式類型之間複製。 如需詳細資訊,請參閱 使用 Direct3D 10.1 的格式轉換。
- 目前可能未對應。
如果您的應用程式需要複製整個資源,建議您改用 ID3D11DeviceContext::CopyResource 。
CopySubresourceRegion 是異步呼叫,可能會新增至命令緩衝區佇列,這會嘗試移除複製數據時可能發生的管線停止。 如需管線停止的詳細資訊,請參閱 效能考慮。
例子
下列代碼段會將位於 (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。
規格需求
需求 | 值 |
---|---|
目標平台 | Windows |
標頭 | d3d11.h |
程式庫 | D3D11.lib |