Condividi tramite


Metodo IDirect3DDevice9::StretchRect (d3d9helper.h)

Copiare il contenuto del rettangolo di origine nel rettangolo di destinazione. Il rettangolo di origine può essere esteso e filtrato in base alla copia. Questa funzione viene spesso usata per modificare le proporzioni di un flusso video.

Sintassi

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

Parametri

[in] pSourceSurface

Tipo: IDirect3DSurface9*

Puntatore alla superficie di origine. Vedi IDirect3DSurface9.

[in] pSourceRect

Tipo: const RECT*

Puntatore al rettangolo di origine. Un valore NULL per questo parametro determina l'utilizzo dell'intera superficie di origine.

[in] pDestSurface

Tipo: IDirect3DSurface9*

Puntatore alla superficie di destinazione. Vedi IDirect3DSurface9.

[in] pDestRect

Tipo: const RECT*

Puntatore al rettangolo di destinazione. Un valore NULL per questo parametro determina l'utilizzo dell'intera superficie di destinazione.

[in] Filter

Tipo: D3DTEXTUREFILTERTYPE

Tipo di filtro. I valori consentiti sono D3DTEXF_NONE, D3DTEXF_POINT o D3DTEXF_LINEAR. Per altre informazioni, vedere D3DTEXTUREFILTERTYPE.

Valore restituito

Tipo: HRESULT

Se il metodo ha esito positivo, il valore restituito viene D3D_OK. Se il metodo ha esito negativo, il valore restituito può essere: D3DERR_INVALIDCALL.

Commenti

Restrizioni di StretchRect

  • Il supporto dei driver varia. Vedere la sezione sul supporto dei driver (di seguito) per vedere quali driver supportano i formati di origine e di destinazione.
  • Le superfici di origine e di destinazione devono essere create nel pool di memoria predefinito.
  • Se viene specificato il filtro, è necessario impostare i limiti di filtro appropriati (vedere StretchRectFilterCaps in D3DCAPS9).
  • L'estensione non è supportata tra rettangoli di origine e di destinazione sulla stessa superficie.
  • L'estensione non è supportata se la superficie di destinazione è una superficie normale fuori schermo, ma l'origine non è.
  • Molti non si estendono tra rettangoli di origine e di destinazione se una delle due superfici è in un formato compresso (vedere Uso di trame compresse (Direct3D 9)).
  • L'estensione supporta la conversione dello spazio dei colori solo da YUV a RGBA ad alta precisione. Poiché il supporto per la conversione dei colori non è supportato dall'emulazione software, usare IDirect3D9::CheckDeviceFormatConversion per testare l'hardware per il supporto per la conversione dei colori.
  • Se la superficie di origine o di destinazione è una superficie di trama (o una superficie di trama del cubo), è necessario usare un driver Direct3D 9 che supporta D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES (vedere D3DDEVCAPS2).
Restrizioni aggiuntive per le superfici depth e stencil
  • Le superfici di origine e di destinazione devono essere superfici stencil di profondità normale (non trame) (vedere IDirect3DDevice9::CreateDepthStencilSurface).
  • Nessuna delle superfici può essere scartata.
  • L'intera superficie deve essere copiata ( ovvero le copie sotto rettangolo non sono consentite).
  • La conversione del formato, l'estensione e la compattazione non sono supportate.
  • StretchRect non può essere chiamato all'interno di una coppia BeginScene/EndScene.
Uso di StretchRect per eseguire il downsample di un oggetto Rendertarget multisample

È possibile usare StretchRect per copiare da un oggetto rendertarget a un altro. Se il rendering di origine è multicampionato, verrà eseguito il downcampionamento del rendering di origine. Ad esempio, è possibile:

  • Creare un oggetto rendertarget multicampionato.
  • Creare un secondo rendering della stessa dimensione, che non è multicampionato.
  • Copiare (usando StretchRect il rendering multisample rendertarget nel secondo rendertarget.
Si noti che l'uso della superficie aggiuntiva interessata dall'uso di StretchRect per eseguire il downsample di un oggetto Rendertarget multisample genererà un riscontro delle prestazioni.

Supporto driver

Esistono molte restrizioni relative alle combinazioni di superficie valide per StretchRect. I fattori includono se il driver è un driver Direct3D 9 o versione precedente e se l'operazione comporterà l'estensione/compattazione. Poiché le applicazioni non devono riconoscere se il driver è un driver Direct3D 9 o meno, il runtime imposterà automaticamente un nuovo limite, D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES limite (vedere D3DDEVCAPS2), per driver a 9 livelli Direct3D e versioni successive.

Driver DirectX 8 (nessuna estensione)
Formati dest
Trama Trama RT RT Fuori schermo normale
Formati Src Trama No No No No
Trama RT No No
RT No No
Fuori schermo normale
 
Driver DirectX 8 (estensione)
Formati dest
Trama Trama RT RT Fuori schermo normale
Formati Src Trama No No No No
Trama RT No No No No
RT No No
Schermata normale No No
 
Driver Direct3D 9 (nessuna estensione)
Formati più dest
Trama Trama RT RT Schermata normale
Formati Src Trama No No
Trama RT No No
RT No No
Schermata normale No
 
Driver Direct3D 9 (estensione)
Formati più dest
Trama Trama RT RT Schermata normale
Formati Src Trama No No
Trama RT No No
RT No No
Schermata normale No No

Requisiti

   
Piattaforma di destinazione Windows
Intestazione d3d9helper.h (include D3D9.h)
Libreria D3D9.lib

Vedi anche

IDirect3DDevice9

IDirect3DDevice9::BeginScene

IDirect3DDevice9::EndScene