Metode IDirect3DDevice9::StretchRect (d3d9helper.h)

Salin isi persegi panjang sumber ke persegi panjang tujuan. Persegi panjang sumber dapat direntangkan dan difilter oleh salinan. Fungsi ini sering digunakan untuk mengubah rasio aspek aliran video.

Sintaks

HRESULT StretchRect(
  [in] IDirect3DSurface9    *pSourceSurface,
  [in] const RECT           *pSourceRect,
  [in] IDirect3DSurface9    *pDestSurface,
  [in] const RECT           *pDestRect,
  [in] D3DTEXTUREFILTERTYPE Filter
);

Parameter

[in] pSourceSurface

Jenis: IDirect3DSurface9*

Arahkan ke permukaan sumber. Lihat IDirect3DSurface9.

[in] pSourceRect

Jenis: const RECT*

Penunjuk ke persegi panjang sumber. NULL untuk parameter ini menyebabkan seluruh permukaan sumber digunakan.

[in] pDestSurface

Jenis: IDirect3DSurface9*

Arahkan ke permukaan tujuan. Lihat IDirect3DSurface9.

[in] pDestRect

Jenis: const RECT*

Penunjuk ke persegi panjang tujuan. NULL untuk parameter ini menyebabkan seluruh permukaan tujuan digunakan.

[in] Filter

Jenis: D3DTEXTUREFILTERTYPE

Jenis filter. Nilai yang diperbolehkan adalah D3DTEXF_NONE, D3DTEXF_POINT, atau D3DTEXF_LINEAR. Untuk informasi selengkapnya, lihat D3DTEXTUREFILTERTYPE.

Mengembalikan nilai

Jenis: HRESULT

Jika metode berhasil, nilai yang dikembalikan adalah D3D_OK. Jika metode gagal, nilai yang dikembalikan dapat berupa: D3DERR_INVALIDCALL.

Keterangan

Pembatasan StretchRect

  • Dukungan driver bervariasi. Lihat bagian tentang dukungan driver (di bawah) untuk melihat driver mana yang mendukung format sumber dan tujuan mana.
  • Permukaan sumber dan tujuan harus dibuat di kumpulan memori default.
  • Jika pemfilteran ditentukan, Anda harus mengatur batas filter yang sesuai (lihat StretchRectFilterCaps di D3DCAPS9).
  • Peregangan tidak didukung antara persegi panjang sumber dan tujuan pada permukaan yang sama.
  • Peregangan tidak didukung jika permukaan tujuan adalah permukaan biasa di luar layar tetapi sumbernya tidak.
  • Anda banyak yang tidak membentang antara persegi panjang sumber dan tujuan jika salah satu permukaan dalam format terkompresi (lihat Menggunakan Tekstur Terkompresi (Direct3D 9)).
  • Peregangan mendukung konversi ruang warna dari YUV ke RGBA presisi tinggi saja. Karena dukungan konversi warna tidak didukung oleh emulasi perangkat lunak, gunakan IDirect3D9::CheckDeviceFormatConversion untuk menguji perangkat keras untuk dukungan konversi warna.
  • Jika permukaan sumber atau tujuan adalah permukaan tekstur (atau permukaan tekstur kubus), Anda harus menggunakan driver Direct3D 9 yang mendukung D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES (lihat D3DDEVCAPS2).
Pembatasan Tambahan untuk Permukaan Kedalaman dan Stensil
  • Permukaan sumber dan tujuan harus permukaan stensil kedalaman biasa (bukan tekstur) (lihat IDirect3DDevice9::CreateDepthStencilSurface).
  • Tidak satu pun dari permukaan dapat dibuang.
  • Seluruh permukaan harus disalin (yaitu: salinan sub-persegi tidak diperbolehkan).
  • Konversi format, peregangan, dan penyusutan tidak didukung.
  • StretchRect tidak dapat dipanggil di dalam pasangan BeginScene/EndScene.
Menggunakan StretchRect untuk downsample Rendertarget Multisample

Anda dapat menggunakan StretchRect untuk menyalin dari satu rendertarget ke rendertarget lainnya. Jika rendertarget sumber multisampel, ini menghasilkan downsampling rendertarget sumber. Misalnya, Anda dapat:

  • Buat rendertarget multisampel.
  • Buat rendertarget kedua dengan ukuran yang sama, yang tidak multisampel.
  • Salin (menggunakan StretchRect rendertarget multisample ke rendertarget kedua.
Perhatikan bahwa penggunaan permukaan tambahan yang terlibat dalam menggunakan StretchRect untuk menurunkan sampel Multisample Rendertarget akan mengakibatkan hit performa.

Dukungan Driver

Ada banyak batasan untuk kombinasi permukaan mana yang valid untuk StretchRect. Faktor-faktor termasuk apakah driver adalah driver Direct3D 9 atau lebih lama, dan apakah operasi akan mengakibatkan peregangan/penyusutan. Karena aplikasi tidak diharapkan untuk mengenali apakah driver adalah driver Direct3D 9 atau tidak, runtime akan secara otomatis mengatur batas baru, D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES tutup (lihat D3DDEVCAPS2), untuk driver tingkat Direct3D 9 ke atas.

Driver DirectX 8 (tanpa peregangan)
Format dest
Tekstur Tekstur RT RT Polos di luar layar
Format Src Tekstur Tidak Tidak Tidak Tidak
Tekstur RT Tidak Ya Ya Tidak
RT Tidak Ya Ya Tidak
Polos di luar layar Ya Ya Ya Ya
 
Driver DirectX 8 (peregangan)
Format dest
Tekstur Tekstur RT RT Polos di luar layar
Format Src Tekstur Tidak Tidak Tidak Tidak
Tekstur RT Tidak Tidak Tidak Tidak
RT Tidak Ya Ya Tidak
Polos di luar layar Tidak Ya Ya Tidak
 
Driver Direct3D 9 (tanpa peregangan)
Format dest
Tekstur Tekstur RT RT Polos di luar layar
Format Src Tekstur Tidak Ya Ya Tidak
Tekstur RT Tidak Ya Ya Tidak
RT Tidak Ya Ya Tidak
Polos di luar layar Tidak Ya Ya Ya
 
Driver Direct3D 9 (peregangan)
Format dest
Tekstur Tekstur RT RT Polos di luar layar
Format Src Tekstur Tidak Ya Ya Tidak
Tekstur RT Tidak Ya Ya Tidak
RT Tidak Ya Ya Tidak
Polos di luar layar Tidak Ya Ya Tidak

Persyaratan

   
Target Platform Windows
Header d3d9helper.h (termasuk D3D9.h)
Pustaka D3D9.lib

Lihat juga

IDirect3DDevice9

IDirect3DDevice9::BeginScene

IDirect3DDevice9::EndScene