ID3D10Device ::CopySubresourceRegion, méthode (d3d10.h)

Copiez une région d’une ressource source vers une ressource de destination.

Syntaxe

void CopySubresourceRegion(
  [in] ID3D10Resource  *pDstResource,
  [in] UINT            DstSubresource,
  [in] UINT            DstX,
  [in] UINT            DstY,
  [in] UINT            DstZ,
  [in] ID3D10Resource  *pSrcResource,
  [in] UINT            SrcSubresource,
  [in] const D3D10_BOX *pSrcBox
);

Paramètres

[in] pDstResource

Type : ID3D10Resource*

Pointeur vers la ressource de destination (voir ID3D10Resource).

[in] DstSubresource

Type : UINT

Index de sous-ressource de la destination.

[in] DstX

Type : UINT

Coordonnée x du coin supérieur gauche de la région de destination.

[in] DstY

Type : UINT

Coordonnée y du coin supérieur gauche de la région de destination.

[in] DstZ

Type : UINT

Coordonnée z du coin supérieur gauche de la région de destination. Pour une sous-ressource 1D ou 2D, cette valeur doit être égale à zéro.

[in] pSrcResource

Type : ID3D10Resource*

Pointeur vers la ressource source (voir ID3D10Resource).

[in] SrcSubresource

Type : UINT

Index de sous-ressource de la source.

[in] pSrcBox

Type : const D3D10_BOX*

Zone 3D (voir D3D10_BOX) qui définit la sous-ressource source qui peut être copiée. Si la valeur est NULL, la sous-ressource source entière est copiée. La zone doit correspondre à la ressource source.

Une zone vide entraîne une absence d’opération. Une zone est vide si la valeur supérieure est supérieure ou égale à la valeur inférieure, ou si la valeur de gauche est supérieure ou égale à la valeur de droite, ou si la valeur de début est supérieure ou égale à la valeur d’arrière-plan. Lorsque la zone est vide, CopySubresourceRegion n’effectue pas d’opération de copie.

Valeur de retour

None

Remarques

La zone source doit être dans la taille de la ressource source. L’emplacement de destination est une valeur absolue (et non une valeur relative). L’emplacement de destination peut être décalé de l’emplacement source ; Toutefois, la taille de la région à copier (y compris l’emplacement de destination) doit correspondre à la ressource de destination.

Si les ressources sont des mémoires tampons, toutes les coordonnées sont exprimées en octets ; si les ressources sont des textures, toutes les coordonnées sont en texels.

D3D10CalcSubresource est une fonction d’assistance pour le calcul des index de sous-ressources.

CopySubresourceRegion effectue la copie sur le GPU (similaire à un memcpy par le processeur). Par conséquent, les ressources source et de destination doivent répondre aux critères suivants :

  • Doivent être des sous-ressources différentes (bien qu’elles puissent provenir de la même ressource).
  • Doit être du même type.
  • Doit avoir des formats compatibles (les formats doivent être identiques ou être du même groupe de types). Par exemple, une texture DXGI_FORMAT_R32G32B32_FLOAT peut être copiée dans une texture DXGI_FORMAT_R32G32B32_UINT, car ces deux formats se trouvent dans le groupe DXGI_FORMAT_R32G32B32_TYPELESS. À compter de Direct3D 10.1, CopySubresourceRegion peut copier entre quelques types de format. Pour plus d’informations, consultez Formater la conversion à l’aide de Direct3D 10.1.
  • Peut ne pas être mappé.
CopySubresourceRegion prend uniquement en charge la copie ; il ne prend pas en charge les conversions d’étirement, de clé de couleur, de fusion ou de format. À compter de Direct3D 10.1, CopySubresourceRegion peut réinterpréter les données de ressource entre quelques types de format. Pour plus d’informations, consultez Formater la conversion à l’aide de Direct3D 10.1.

Si votre application doit copier une ressource entière, nous vous recommandons d’utiliser ID3D10Device ::CopyResource à la place.

CopySubresourceRegion est un appel asynchrone que le runtime peut ajouter à la file d’attente command-buffer. Ce comportement asynchrone tente de supprimer les blocages de pipeline qui peuvent se produire lors de la copie de données. Pour plus d’informations, consultez Considérations relatives aux performances .

Différences entre Direct3D 10 et Direct3D 10.1 :

Direct3D 10 présente les limitations suivantes :

  • Vous ne pouvez pas utiliser une ressource de gabarit de profondeur comme destination.
  • Vous ne pouvez pas utiliser une ressource immuable comme destination.
  • Vous ne pouvez pas utiliser une texture multi-échantillonnée comme source ou destination
Direct3D 10.1 a ajouté la prise en charge des fonctionnalités suivantes :
  • Vous pouvez utiliser une mémoire tampon de profondeur-gabarit comme source ou destination.
  • Vous pouvez utiliser des ressources échantillonnée multiples comme source et destination uniquement si la source et la destination ont un nombre et une qualité identiques. Si la source et la destination diffèrent par le nombre et la qualité multiéchantillons, ou si la source est échantillonnée à plusieurs et que la destination n’est pas échantillonnée à plusieurs échantillons (ou vice versa), l’appel à ID3D10Device ::CopySubresourceRegion échoue.
  • Vous pouvez copier entre des ressources non compressées et compressées. Pendant la copie, les conversions de format spécifiées dans Conversion de format à l’aide de Direct3D 10.1 sont automatiquement prises en charge. La ressource non compressée doit être au moins préstructurée et typée. Vous devez également tenir compte de la différence entre la taille virtuelle et la taille physique des niveaux mipmaps.
 
Note Si vous utilisez CopySubresourceRegion avec une mémoire tampon de gabarit de profondeur ou une ressource multi-échantillonnée, vous devez copier l’intégralité de la sous-ressource. Vous devez également passer 0 aux paramètres DstX, DstY et DstZ et NULL au paramètre pSrcBox . En outre, les ressources source et de destination, qui sont représentées respectivement par les paramètres pSrcResource et pDstResource , doivent avoir des valeurs de nombre d’échantillons identiques.
 

Exemple

L’extrait de code suivant copie une zone (située à (120 100),(200 220)) d’une texture source dans une région (130 120),(210 240) dans une texture de destination.

D3D10_BOX sourceRegion;
sourceRegion.left = 120;
sourceRegion.right = 200;
sourceRegion.top = 100;
sourceRegion.bottom = 220;
sourceRegion.front = 0;
sourceRegion.back = 1;

pd3dDevice->CopySubresourceRegion( pDestTexture, 0, 130, 120, 0, pSourceTexture, 0, &sourceRegion );

Notez que, pour une texture 2D, l’avant et l’arrière sont toujours définis sur 0 et 1 respectivement.

Configuration requise

Condition requise Valeur
Plateforme cible Windows
En-tête d3d10.h
Bibliothèque D3D10.lib

Voir aussi

ID3D10Device

ID3D10Resource, interface