Méthode IDirect3DDevice9 ::UpdateTexture (d3d9helper.h)
Mises à jour les parties sale d’une texture.
Syntaxe
HRESULT UpdateTexture(
[in] IDirect3DBaseTexture9 *pSourceTexture,
[in] IDirect3DBaseTexture9 *pDestinationTexture
);
Paramètres
[in] pSourceTexture
Type : IDirect3DBaseTexture9*
Pointeur vers une interface IDirect3DBaseTexture9 , représentant la texture source. La texture source doit être dans la mémoire système (D3DPOOL_SYSTEMMEM).
[in] pDestinationTexture
Type : IDirect3DBaseTexture9*
Pointeur vers une interface IDirect3DBaseTexture9 , représentant la texture de destination. La texture de destination doit se trouver dans le pool de mémoire D3DPOOL_DEFAULT.
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.
Remarques
Vous pouvez sale une partie d’une texture en la verrouillant ou en appelant l’une des méthodes suivantes.
- IDirect3DCubeTexture9 ::AddDirtyRect
- IDirect3DTexture9 ::AddDirtyRect
- IDirect3DVolumeTexture9 ::AddDirtyBox
- IDirect3DDevice9 ::UpdateSurface
Pour des raisons de performances, sale régions sont enregistrées uniquement pour le niveau zéro d’une texture. Pour les sous-niveaux, il est supposé que le rectangle ou la zone correspondant (mis à l’échelle) est également sale. Les régions sales sont automatiquement enregistrées lorsque LockRect ou IDirect3DVolumeTexture9 ::LockBox est appelé sans D3DLOCK_NO_DIRTY_UPDATE ni D3DLOCK_READONLY. En outre, la surface de destination de IDirect3DDevice9 ::UpdateSurface est marquée sale.
Cette méthode échoue si les textures sont de types différents, si leurs mémoires tampons de niveau inférieur sont de tailles différentes ou si leurs niveaux correspondants ne correspondent pas. Par exemple, considérez une texture source à six niveaux avec les dimensions suivantes.
32x16, 16x8, 8x4, 4x2, 2x1, 1x1
Cette texture source à six niveaux peut être la source de la destination à un niveau suivante.
1x1
Pour la destination à deux niveaux suivante.
2x1, 1x1
Ou, pour la destination à trois niveaux suivante.
4x2, 2x1, 1x1
En outre, cette méthode échoue si les textures sont de formats différents. Si la texture de destination a moins de niveaux que la source, seuls les niveaux correspondants sont copiés. Si la texture source a moins de niveaux que la destination, la méthode échoue.
Si la texture source a sale régions, la copie peut être optimisée en limitant la copie à ces régions uniquement. Il n’est pas garanti que seuls les octets marqués sale seront copiés.
Voici les possibilités de combinaisons de surfaces source et de destination :
- Si pSourceTexture est un mipmap non généré automatiquement et pDestinationTexture est un mipmap généré automatiquement, seul le niveau correspondant le plus élevé est mis à jour et les sous-niveaux de destination sont régénérés. Tous les autres sous-niveaux sources sont ignorés.
- Si pSourceTexture et pDestinationTexture sont des mipmaps générés automatiquement, seul le niveau correspondant le plus élevé est mis à jour. Les sous-niveaux de la source sont ignorés et les sous-niveaux de destination sont régénérés.
- Si pSourceTexture est un mipmap généré automatiquement et pDestinationTexture un mipmap non généré automatiquement, UpdateTexture échoue.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Windows |
En-tête | d3d9helper.h (inclure D3D9.h) |
Bibliothèque | D3D9.lib |