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