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-source 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, il doit s’agir de 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, il doit s’agir de zéro.
[in] pSrcResource
Type : ID3D11Resource*
Pointeur vers la ressource source (voir ID3D11Resource).
[in] SrcSubresource
Type : UINT
Index de sous-source source.
[in, optional] pSrcBox
Type : const D3D11_BOX*
Pointeur vers une zone 3D (voir D3D11_BOX) qui définit la sous-source source qui peut être copiée. Si NULL, la sous-ressource source entière est copiée. La zone doit correspondre à la ressource source.
Une zone vide génère une no-op. Une zone est vide si la valeur supérieure est supérieure ou égale à la valeur inférieure, ou si la valeur gauche est supérieure ou égale à la valeur de droite, ou si la valeur frontale est supérieure ou égale à la valeur de retour. Lorsque la zone est vide, CopySubresourceRegion n’effectue pas d’opération de copie.
Valeur de retour
Aucun
Remarques
La zone source doit se trouver dans la taille de la ressource source. Les décalages de destination, (x, y et z), autorisent le décalage de la zone source lors de l’écriture dans la ressource de destination ; Toutefois, les dimensions de la zone source et les décalages doivent se trouver dans la taille de la ressource. Si vous essayez de copier en dehors de la ressource de destination ou 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 CopySubresourceReg ion non valide. Les paramètres non valides pour CopySubresourceRegion entraîner un comportement non défini et peuvent entraîner un rendu incorrect, une capture, aucune copie ou même la suppression de l’appareil 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 calculer les 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 :
- Doit être des sous-ressources différentes (bien qu’elles puissent provenir de la même ressource).
- Doit être le 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 pouvez copier entre quelques types de format. Pour plus d’informations, consultez Conversion de format à l’aide de Direct3D 10.1.
- Peut ne pas être mappé actuellement.
CopySubresourceRegion prend uniquement en charge la copie ; il ne prend pas en charge l’étirement, la touche de couleur ou le mélange. CopySubresourceRegion pouvez réinterpréter les données de ressource entre quelques types de format. Pour plus d’informations, consultez Conversion de format à l’aide de Direct3D 10.1.
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 mémoires tampons de commandes, 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 de
L’extrait de code suivant copie une zone (située à (120 100),(200 220)) d’une texture source dans une région (10 20),(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, l’avant et l’arrière sont définis respectivement sur 0 et 1.
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Windows |
d’en-tête | d3d11.h |
bibliothèque | D3D11.lib |