structure D3D10_MAPPED_TEXTURE2D (d3d10.h)

Fournit l’accès aux données de sous-ressource dans une texture 2D.

Syntaxe

typedef struct D3D10_MAPPED_TEXTURE2D {
  void *pData;
  UINT RowPitch;
} D3D10_MAPPED_TEXTURE2D;

Membres

pData

Type : void*

Pointeur vers les données.

RowPitch

Type : UINT

Pitch, ou largeur, ou taille physique (en octets) d’une ligne d’une texture non compressée. Une texture compressée en bloc est encodée en blocs 4x4 (voir taille virtuelle et taille physique) ; Par conséquent, RowPitch est le nombre d’octets dans un bloc de 4x4 texels.

Remarques

Cette structure est utilisée dans un appel à Mapper.

Pour illustrer le pitch de ligne, supposons une texture 2D non compressée avec des niveaux mipmap, comme illustré dans l’illustration suivante.

Illustration d’une texture 2D non compressée avec des niveaux mipmap

Visualisez la texture de niveau supérieur dessinée dans un seul plan, comme dans l’illustration suivante.

Illustration d’un plan unique

Toutefois, la disposition réelle de chaque élément en mémoire ressemble davantage à l’illustration suivante.

Illustration du pitch de ligne en mémoire

Pour cet exemple, le pitch de ligne englobe 5 éléments (une ligne), dont la taille est cinq fois supérieure au nombre d’octets par élément.

Utilisez le pitch de ligne pour faire avancer un pointeur entre des lignes au sein d’un seul plan de texture 2D.

Exemple

Pour accéder aux données dans, par exemple, le troisième niveau mipmap, vous devez caster le pointeur pData comme illustré dans l’exemple suivant pour une texture à virgule flottante.

D3D10_MAPPED_TEXTURE2D mappedTexture;
if( SUCCEEDED( pTexture->Map( D3D10CalcSubresource(2, 0, 3), D3D10_MAP_WRITE_DISCARD, 0, &mappedTexture )))
{
    D3D10_TEXTURE2D_DESC desc;
    pTexture->GetDesc( &desc );
	
    // Compute the width and height of the third mipmap level
    const UINT WIDTH = desc.Width >> 2;
    const UINT HEIGHT = desc.Height >> 2;
	
    FLOAT* pTexels = (FLOAT*)mappedTexture.pData;
    for( UINT row = 0; row < HEIGHT; row++ )
    {
      UINT rowStart = row * mappedTexture.RowPitch/4;
      for( UINT col = 0; col < WIDTH; col++ )
      {
        pTexels[rowStart + col*4 + 0]; // Red
        pTexels[rowStart + col*4 + 1]; // Green
        pTexels[rowStart + col*4 + 2]; // Blue
        pTexels[rowStart + col*4 + 3]; // Alpha
      }
    }

    pTexture->Unmap(D3D10CalcSubresource(2, 0, 3));
}

Configuration requise

Condition requise Valeur
En-tête d3d10.h

Voir aussi

Structures de ressources