ID3D10Texture1D::Map

サブリソースに格納されているデータへのポインターを取得して、そのサブリソースへの GPU のアクセスを拒否します。

HRESULT 
Map(
  UINT Subresource,
  D3D10_MAP MapType,
  UINT MapFlags,
  void **ppData
);

パラメータ

  • Subresource
    サブリソースのインデックス番号です。詳細については、「D3D10CalcSubresource」を参照してください。
  • MapType
    リソースに対する CPU の読み取りおよび書き込みのアクセス許可を指定します。指定可能な値については、「D3D10_MAP」を参照してください。
  • MapFlags
    GPU がビジーなときの CPU の動作を指定するフラグです。このフラグはオプションです。
  • ppData
    テクスチャー リソース データへのポインターです。

戻り値

この関数が正常完了した場合は、S_OK が返されます。 その他の制約、および Map メソッドのいずれかで返されるエラー値の一覧については、「解説」を参照してください。

解説 

テクスチャーをマップすることにより、CPU はテクスチャーのサブリソース内の基本データに直接アクセスできます。 このメソッドが正常に実行されるには、マップされるテクスチャーを適切なフラグ (「D3D10_CPU_ACCESS_FLAG」を参照) を使用して作成する必要があります。その使用方法 (「D3D10_USAGE」を参照) には、D3D10_USAGE_DYNAMIC または D3D10_USAGE_STAGING のいずれかを指定する必要があります。

Map メソッドの一般的な失敗は、以下の戻り値で示されます。

  • E_WASSTILLRENDERING
    MapType で D3D10_MAP_FLAG_DO_NOT_WAIT が指定されており、GPU がリソースの処理をまだ終えていない場合、Map は E_WASSTILLRENDERING を返します。
  • E_DEVICEREMOVED
    MapType によって CPU によるすべての読み取りアクセスが許可されており、ビデオカードが削除されていた場合、Map は E_DEVICEREMOVED を返します。

Map に関しては次の制約があります。

  • 1 つのサブリソースを複数回マップすることはできません。つまり、既にマップされているサブリソースに対して Map を呼び出すことはできません。
  • レンダリング操作を実行可能にする前に (ID3D10Device::Draw の前に)、パイプラインにバインドされているサブリソースをすべてアンマップしておく必要があります。

基となるサブリソース データへのアクセスを意味のあるものにするには、アプリケーションは void の pData ポインターを適切な型にキャストする必要があります。 たとえば、次のコードは、1D サブリソースの各テクセルの読み込み方法を示しています。 テクスチャーは DXGI_FORMAT_R32G32B32A32_FLOAT を使用して作成されており、pData は、このメソッドの呼び出しが成功して出力されたテクスチャー リソース データへのポインターであると仮定します。

FLOAT* pTexels = (FLOAT*)pData;
for( UINT col = 0; col < width; col++ )
{
  pTexels[col*4 + 0]; // Alpha
  pTexels[col*4 + 1]; // Blue
  pTexels[col*4 + 2]; // Green
  pTexels[col*4 + 3]; // Red
}

Direct3D 9 と Direct3D 10 の違い

Direct3D 10 の Map は、Direct3D 9 のリソースの Lock と似ています。

要件

ヘッダー: D3D10.h 宣言

関連項目

ID3D10Texture1D インターフェイス