D3D10_MAPPED_TEXTURE2D 结构 (d3d10.h)

提供对 2D 纹理中的 子资源 数据的访问。

语法

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

成员

pData

类型: void*

指向数据的指针。

RowPitch

类型: UINT

未压缩纹理的一行的间距、宽度或物理大小 ((以字节) 为单位)。 块压缩纹理以 4x4 块编码 (查看 虚拟大小与物理大小) ;因此, RowPitch 是 4x4 纹素块中的字节数。

注解

此结构用于对 Map 的调用。

为了说明行间距,假设具有 mipmap 级别的未压缩 2D 纹理,如下图所示。

具有 mipmap 级别的未压缩 2D 纹理的插图

可视化在单个平面中绘制的顶级纹理,如下图所示。

单平面图示

但是,内存中每个元素的实际布局看起来更类似于下图。

内存中的行间距图示

在此示例中,行间距包含 5 个元素, (一行) ,其大小是每个元素字节数的五倍。

使用行间距在单个 2D 纹理平面中的行之间推进指针。

示例

若要访问数据,例如第三个 mipmap 级别,必须强制转换 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));
}

要求

要求
Header d3d10.h

另请参阅

资源结构