Поделиться через


структура D3D10_MAPPED_TEXTURE2D (d3d10.h)

Предоставляет доступ к данным подресурсов в двухd текстуре.

Синтаксис

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

Члены

pData

Тип: void*

Указатель на данные.

RowPitch

Тип: UINT

Шаг, ширина или физический размер (в байтах) одной строки несжатой текстуры. Текстура со сжатием блока закодирована в блоки 4x4 (см. раздел Виртуальный размер и физический размер); Поэтому RowPitch — это количество байтов в блоке 4x4 текселей.

Комментарии

Эта структура используется в вызове map.

Чтобы проиллюстрировать шаг строки, предположим, что двухd-текстура без сжатия с уровнями MIP-карты, как показано на следующем рисунке.

Иллюстрация несжатой двухd-текстуры с уровнями MIP-карты

Визуализируйте текстуру верхнего уровня, нарисованную в одной плоскости, как показано на следующем рисунке.

Иллюстрация одной плоскости

Однако фактический макет каждого элемента в памяти больше похож на приведенный ниже рисунок.

Иллюстрация шага строки в памяти

В этом примере шаг строки охватывает 5 элементов (одна строка), размер которых будет в пять раз больше байтов на элемент.

Используйте шаг строки для продвижения указателя между строками в пределах одной двухмерной плоскости текстуры.

Примере

Чтобы получить доступ к данным, скажем, на третьем уровне MIP-карты, необходимо привести указатель pData , как показано в следующем примере для текстуры с плавающей запятой.

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

Требования

Требование Значение
Заголовок d3d10.h

См. также раздел

Структуры ресурсов