ID3D11DeviceContext ::CopySubresourceRegion, méthode (d3d11.h)
Copiez une région d’une ressource source vers une ressource de destination.
Syntaxe
void CopySubresourceRegion(
[in] ID3D11Resource *pDstResource,
[in] UINT DstSubresource,
[in] UINT DstX,
[in] UINT DstY,
[in] UINT DstZ,
[in] ID3D11Resource *pSrcResource,
[in] UINT SrcSubresource,
[in, optional] const D3D11_BOX *pSrcBox
);
Paramètres
[in] pDstResource
Type : ID3D11Resource*
Pointeur vers la ressource de destination (voir ID3D11Resource).
[in] DstSubresource
Type : UINT
Index de sous-ressource de 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. Pour une sous-ressource 1D, cette valeur doit être égale à zéro.
[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 : ID3D11Resource*
Pointeur vers la ressource source (voir ID3D11Resource).
[in] SrcSubresource
Type : UINT
Index de sous-ressource source.
[in, optional] pSrcBox
Type : const D3D11_BOX*
Pointeur vers une zone 3D (voir D3D11_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 s’adapter à la ressource source.
Une zone vide génère une opération de non-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 avant est supérieure ou égale à la valeur arrière. 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. Les décalages de destination (x, y et z) permettent à la zone source d’être décalée lors de l’écriture dans la ressource de destination ; toutefois, les dimensions de la zone source et les décalages doivent être dans la taille de la ressource. Si vous essayez de copier en dehors de la ressource de destination ou si vous spécifiez une zone source supérieure à la ressource source, le comportement de CopySubresourceRegion n’est pas défini. Si vous avez créé un appareil qui prend en charge la couche de débogage, la sortie de débogage signale une erreur sur cet appel CopySubresourceRegion non valide. Les paramètres non valides de CopySubresourceRegion entraînent un comportement non défini et peuvent entraîner un rendu incorrect, une coupure, aucune copie ou même la suppression du périphérique de rendu.
Si les ressources sont des mémoires tampons, toutes les coordonnées sont en octets ; si les ressources sont des textures, toutes les coordonnées sont en texels. D3D11CalcSubresource 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 :
- Il doit s’agir de sous-ressources différentes (bien qu’elles puissent provenir de la même ressource).
- Doit être du même type.
- Doit avoir des formats DXGI compatibles (identiques ou 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. 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é actuellement.
Si votre application doit copier une ressource entière, nous vous recommandons d’utiliser ID3D11DeviceContext ::CopyResource à la place.
CopySubresourceRegion est un appel asynchrone, qui peut être ajouté à la file d’attente de la mémoire tampon de commande, ce qui tente de supprimer les blocages de pipeline qui peuvent se produire lors de la copie de données. Pour plus d’informations sur les blocages de pipeline, consultez Considérations relatives aux performances.
Exemple
L’extrait de code suivant copie une zone (située à (120 100),(200 220)) d’une texture source dans une région (10 200), (90 140) dans une texture de destination.D3D11_BOX sourceRegion;
sourceRegion.left = 120;
sourceRegion.right = 200;
sourceRegion.top = 100;
sourceRegion.bottom = 220;
sourceRegion.front = 0;
sourceRegion.back = 1;
pd3dDeviceContext->CopySubresourceRegion( pDestTexture, 0, 10, 20, 0, pSourceTexture, 0, &sourceRegion );
Notez que pour une texture 2D, les valeurs avant et arrière sont définies sur 0 et 1 respectivement.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Windows |
En-tête | d3d11.h |
Bibliothèque | D3D11.lib |