次の方法で共有


D3D10_MAPPED_TEXTURE2D

2D テクスチャー内のサブリソース データへのアクセスを提供します。

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

メンバ

  • pData
    データへのポインターです。
  • RowPitch
    圧縮されていないテクスチャーの 1 行のピッチ、幅、または物理サイズ (バイト単位) です。ブロック圧縮されたテクスチャーは 4x4 ブロックでエンコードされます (「仮想サイズ対物理サイズ」を参照してください)。したがって、RowPitch は 4x4 テクセルのブロックにおけるバイト数になります。

解説 

この構造体は、ID3D10Texture2D::Map の呼び出しで使用されます。

行ピッチを表すには、ミップマップ レベルを持つ未圧縮の 2D テクスチャーを想定します。

Bb205319.d3d10_resource_texture2d(ja-jp,VS.85).png

次のように、1 つの平面に描画されたトップレベルのテクスチャーを視覚化します。

Bb205319.d3d10_2d_texture_conceptual(ja-jp,VS.85).gif

ただしメモリー内の各要素は、実際には次のようなレイアウトです。

Bb205319.d3d10_2d_texture_memory(ja-jp,VS.85).gif

この例では、行ピッチは 5 つの要素を含み (1 行)、そのサイズは各要素のバイト数の 5 倍になります。

行ピッチを使用して、1 つの 2D テクスチャー平面内の各行にポインターを移動します。

たとえば、第 3 ミップマップ レベル内のデータにアクセスするには、以下の浮動小数点テクスチャーの例に示すように、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 宣言

関連項目

リソース構造体