Share via


IDirect3DDevice9::StretchRect, méthode (d3d9helper.h)

Copiez le contenu du rectangle source dans le rectangle de destination. Le rectangle source peut être étiré et filtré par la copie. Cette fonction est souvent utilisée pour modifier le rapport d’aspect d’un flux vidéo.

Syntaxe

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

Paramètres

[in] pSourceSurface

Type : IDirect3DSurface9*

Pointeur vers l’aire source. Consultez IDirect3DSurface9.

[in] pSourceRect

Type : const RECT*

Pointeur vers le rectangle source. Une valeur NULL pour ce paramètre entraîne l’utilisation de l’ensemble de la surface source.

[in] pDestSurface

Type : IDirect3DSurface9*

Pointeur vers la surface de destination. Consultez IDirect3DSurface9.

[in] pDestRect

Type : const RECT*

Pointeur vers le rectangle de destination. Une valeur NULL pour ce paramètre entraîne l’utilisation de toute la surface de destination.

[in] Filter

Type : D3DTEXTUREFILTERTYPE

Type de filtre. Les valeurs autorisées sont D3DTEXF_NONE, D3DTEXF_POINT ou D3DTEXF_LINEAR. Pour plus d’informations, consultez D3DTEXTUREFILTERTYPE.

Valeur retournée

Type : HRESULT

Si la méthode réussit, la valeur de retour est D3D_OK. Si la méthode échoue, la valeur de retour peut être : D3DERR_INVALIDCALL.

Notes

StretchRect Restrictions

  • La prise en charge des pilotes varie. Consultez la section sur la prise en charge des pilotes (ci-dessous) pour savoir quels pilotes prennent en charge les formats source et de destination.
  • Les surfaces source et de destination doivent être créées dans le pool de mémoire par défaut.
  • Si le filtrage est spécifié, vous devez définir les majuscules de filtre appropriées (voir StretchRectFilterCaps dans D3DCAPS9).
  • L’étirement n’est pas pris en charge entre les rectangles source et de destination sur la même surface.
  • L’étirement n’est pas pris en charge si la surface de destination est une surface simple hors écran, mais que la source ne l’est pas.
  • Vous n’étiez pas entre les rectangles source et de destination si l’une ou l’autre surface est au format compressé (voir Utilisation de textures compressées (Direct3D 9)).
  • L’étirement prend uniquement en charge la conversion d’espace de couleur de YUV en RVBA de haute précision. Étant donné que la prise en charge de la conversion de couleur n’est pas prise en charge par l’émulation logicielle, utilisez IDirect3D9::CheckDeviceFormatConversion pour tester le matériel pour la prise en charge de la conversion de couleur.
  • Si la surface source ou de destination est une surface de texture (ou une surface de texture de cube), vous devez utiliser un pilote Direct3D 9 qui prend en charge D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES (voir D3DDEVCAPS2).
Restrictions supplémentaires pour les surfaces de profondeur et de gabarit
  • Les surfaces source et de destination doivent être des surfaces de gabarit de profondeur simple (et non des textures) (voir IDirect3DDevice9::CreateDepthStencilSurface).
  • Aucune des surfaces ne peut être ignorée.
  • La surface entière doit être copiée (c’est-à-dire que les copies sous-rectangles ne sont pas autorisées).
  • La conversion de format, l’étirement et la réduction ne sont pas pris en charge.
  • StretchRect ne peut pas être appelé à l’intérieur d’une paire BeginScene/EndScene.
Utilisation de StretchRect pour sous-échantillonner un rendertarget multi-échantillon

Vous pouvez utiliser StretchRect pour copier d’un rendertarget vers un autre. Si le rendertarget source est multi-échantillonné, cela entraîne un sous-échantillonnage du rendertarget source. Par instance, vous pouvez :

  • Créez un rendertarget multi-échantillonné.
  • Créez un deuxième rendertarget de la même taille, qui n’est pas multi-échantillonné.
  • Copiez (à l’aide de StretchRect le rendertarget multi-échantillon sur le deuxième rendertarget.
Notez que l’utilisation de la surface supplémentaire impliquée dans l’utilisation de StretchRect pour sous-échantillonner un rendertarget multiéchantillon entraîne un impact sur les performances.

Prise en charge de pilote

Il existe de nombreuses restrictions quant aux combinaisons de surfaces valides pour StretchRect. Les facteurs incluent si le pilote est un pilote Direct3D 9 ou plus ancien, et si l’opération entraîne une étirement/réduction. Étant donné que les applications ne sont pas censées reconnaître si le pilote est un pilote Direct3D 9 ou non, le runtime définit automatiquement une nouvelle limite, D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES limite (voir D3DDEVCAPS2), pour les pilotes Direct3D à 9 niveaux et versions ultérieures.

Pilote DirectX 8 (pas d’étirement)
Formats dest
Texture Texture RT RT Hors écran simple
Formats Src Texture Non Non Non Non
Texture RT Non Oui Oui Non
RT Non Oui Oui Non
Hors écran simple Oui Oui Oui Oui
 
Pilote DirectX 8 (étirement)
Formats dest
Texture Texture RT RT Hors écran simple
Formats Src Texture Non Non Non Non
Texture RT Non Non Non Non
RT Non Oui Oui Non
Hors écran simple Non Oui Oui Non
 
Pilote Direct3D 9 (pas d’étirement)
Formats dest
Texture Texture RT RT Hors écran simple
Formats Src Texture Non Oui Oui Non
Texture RT Non Oui Oui Non
RT Non Oui Oui Non
Hors écran simple Non Oui Oui Oui
 
Pilote Direct3D 9 (étirement)
Formats dest
Texture Texture RT RT Hors écran simple
Formats Src Texture Non Oui Oui Non
Texture RT Non Oui Oui Non
RT Non Oui Oui Non
Hors écran simple Non Oui Oui Non

Spécifications

   
Plateforme cible Windows
En-tête d3d9helper.h (inclure D3D9.h)
Bibliothèque D3D9.lib

Voir aussi

IDirect3DDevice9

IDirect3DDevice9::BeginScene

IDirect3DDevice9::EndScene