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 宣言