METODE ID3D10Device::CopySubresourceRegion (d3d10.h)

Salin wilayah dari sumber daya sumber ke sumber daya tujuan.

Sintaks

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
);

Parameter

[in] pDstResource

Jenis: ID3D10Resource*

Penunjuk ke sumber daya tujuan (lihat ID3D10Resource).

[in] DstSubresource

Jenis: UINT

Indeks sub-sumber daya tujuan.

[in] DstX

Jenis: UINT

Koordinat x sudut kiri atas wilayah tujuan.

[in] DstY

Jenis: UINT

Koordinat y sudut kiri atas wilayah tujuan.

[in] DstZ

Jenis: UINT

Koordinat z sudut kiri atas wilayah tujuan. Untuk sub sumber daya 1D atau 2D, ini harus nol.

[in] pSrcResource

Jenis: ID3D10Resource*

Penunjuk ke sumber daya sumber (lihat ID3D10Resource).

[in] SrcSubresource

Jenis: UINT

Indeks subsumber daya sumber.

[in] pSrcBox

Jenis: const D3D10_BOX*

Kotak 3D (lihat D3D10_BOX) yang menentukan subresource sumber yang dapat disalin. Jika NULL, seluruh subsumber daya sumber disalin. Kotak harus pas dalam sumber daya sumber.

Kotak kosong menghasilkan no-op. Kotak kosong jika nilai atas lebih besar dari atau sama dengan nilai bawah, atau nilai kiri lebih besar dari atau sama dengan nilai kanan, atau nilai depan lebih besar dari atau sama dengan nilai belakang. Saat kotak kosong, CopySubresourceRegion tidak melakukan operasi salin.

Nilai kembali

Tidak ada

Keterangan

Kotak sumber harus dalam ukuran sumber daya sumber. Lokasi tujuan adalah nilai absolut (bukan nilai relatif). Lokasi tujuan dapat diimbangi dari lokasi sumber; namun, ukuran wilayah yang akan disalin (termasuk lokasi tujuan) harus pas di sumber daya tujuan.

Jika sumber daya adalah buffer, semua koordinat berada dalam byte; jika sumber daya adalah tekstur, semua koordinat berada dalam texel.

D3D10CalcSubresource adalah fungsi pembantu untuk menghitung indeks sub sumber daya.

CopySubresourceRegion melakukan salinan pada GPU (mirip dengan memcpy oleh CPU). Sebagai konsekuensinya, sumber daya sumber dan tujuan harus memenuhi kriteria berikut:

  • Harus berupa subsumber daya yang berbeda (meskipun dapat berasal dari sumber daya yang sama).
  • Harus tipe yang sama.
  • Harus memiliki format yang kompatibel (format harus identik atau berasal dari grup jenis yang sama). Misalnya, tekstur DXGI_FORMAT_R32G32B32_FLOAT dapat disalin ke tekstur DXGI_FORMAT_R32G32B32_UINT karena kedua format ini berada dalam grup DXGI_FORMAT_R32G32B32_TYPELESS. Dimulai dengan Direct3D 10.1, CopySubresourceRegion dapat menyalin di antara beberapa jenis format. Untuk informasi selengkapnya, lihat Konversi Format menggunakan Direct3D 10.1.
  • Mungkin saat ini tidak dipetakan.
CopySubresourceRegion hanya mendukung penyalinan; ini tidak mendukung konversi stretch, kunci warna, campuran, atau format apa pun. Dimulai dengan Direct3D 10.1, CopySubresourceRegion dapat menginterpretasikan ulang data sumber daya di antara beberapa jenis format. Untuk informasi selengkapnya, lihat Konversi Format menggunakan Direct3D 10.1.

Jika aplikasi Anda perlu menyalin seluruh sumber daya, sebaiknya gunakan ID3D10Device::CopyResource sebagai gantinya.

CopySubresourceRegion adalah panggilan asinkron yang dapat ditambahkan runtime ke antrean buffer perintah. Behaviorattempts asinkron ini untuk menghapus stall alur yang mungkin terjadi saat menyalin data. Lihat pertimbangan performa untuk detail selengkapnya.

Perbedaan antara Direct3D 10 dan Direct3D 10.1:

Direct3D 10 memiliki batasan berikut:

  • Anda tidak dapat menggunakan sumber daya stensil kedalaman sebagai tujuan.
  • Anda tidak dapat menggunakan sumber daya yang tidak dapat diubah sebagai tujuan.
  • Anda tidak dapat menggunakan tekstur multisampel sebagai sumber atau tujuan
Direct3D 10.1 telah menambahkan dukungan untuk fitur-fitur berikut:
  • Anda dapat menggunakan buffer stensil kedalaman sebagai sumber atau tujuan.
  • Anda dapat menggunakan sumber daya multisampled sebagai sumber dan tujuan hanya jika sumber dan tujuan memiliki jumlah dan kualitas multisampled yang identik. Jika sumber dan tujuan berbeda dalam jumlah dan kualitas multisampled atau jika sumber multisampled dan tujuannya tidak multisampled (atau sebaliknya), panggilan ke ID3D10Device::CopySubresourceRegion gagal.
  • Anda dapat menyalin antara sumber daya yang tidak dikompresi dan terkompresi. Selama penyalinan, konversi format yang ditentukan dalam Konversi Format menggunakan Direct3D 10.1 didukung secara otomatis. Sumber daya yang tidak dikompresi setidaknya harus distruktur, dan diketik. Anda juga harus mempertangungjawabkan perbedaan antara virtual dan ukuran fisik tingkat mipmaps.
 
Catatan Jika Anda menggunakan CopySubresourceRegion dengan buffer stensil kedalaman atau sumber daya multisampel, Anda harus menyalin seluruh subsumber daya. Anda juga harus meneruskan 0 ke parameter DstX, DstY, dan DstZ dan NULL ke parameter pSrcBox . Selain itu, sumber daya sumber dan tujuan, yang masing-masing diwakili oleh parameter pSrcResource dan pDstResource , harus memiliki nilai jumlah sampel yang identik.
 

Contoh

Cuplikan kode berikut menyalin kotak (terletak di (120.100),(200.220)) dari tekstur sumber ke wilayah (130.120),(210.240) dalam tekstur tujuan.

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 );

Perhatikan bahwa, untuk tekstur 2D, depan dan belakang selalu diatur ke 0 dan 1 masing-masing.

Persyaratan

Persyaratan Nilai
Target Platform Windows
Header d3d10.h
Pustaka D3D10.lib

Lihat juga

ID3D10Device

ID3D10Resource Interface