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