D3D10_MAPPED_TEXTURE2D-Struktur (d3d10.h)

Bietet Zugriff auf Unterressourcendaten in einer 2D-Textur.

Syntax

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

Member

pData

Typ: void*

Zeiger auf die Daten.

RowPitch

Typ: UINT

Die Tonhöhe oder Breite oder physische Größe (in Byte) einer Zeile einer nicht komprimierten Textur. Eine blockkomprimierte Textur wird in 4x4-Blöcken codiert (siehe virtuelle Größe im Vergleich zu physischer Größe). Daher ist RowPitch die Anzahl der Bytes in einem Block von 4x4 Texels.

Hinweise

Diese Struktur wird in einem Aufruf von Map verwendet.

Um die Zeilenhöhe zu veranschaulichen, nehmen Sie eine unkomprimierte 2D-Textur mit Mipmap-Ebenen an, wie in der folgenden Abbildung dargestellt.

Abbildung einer unkomprimierten 2D-Textur mit Mipmap-Ebenen

Visualisieren Sie die Textur der obersten Ebene, die in einer einzelnen Ebene gezeichnet wird, wie in der folgenden Abbildung.

Abbildung einer einzelnen Ebene

Das tatsächliche Layout der einzelnen Elemente im Arbeitsspeicher ähnelt jedoch eher der folgenden Abbildung.

Abbildung des Zeilenabstands im Arbeitsspeicher

In diesem Beispiel umfasst der Zeilenabstand 5 Elemente (eine Zeile), deren Größe die fünffache Anzahl von Bytes pro Element betragen würde.

Verwenden Sie Zeilenabstand, um einen Zeiger zwischen Zeilen innerhalb einer einzelnen 2D-Texturebene zu erweitern.

Beispiel

Um auf Daten in z. B. der dritten Mipmap-Ebene zuzugreifen, müssen Sie den pData-Zeiger wie im folgenden Beispiel für eine Gleitkommatextur umstellen.

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));
}

Anforderungen

Anforderung Wert
Header d3d10.h

Weitere Informationen

Ressourcenstrukturen