PFND3DDDI_CREATERESOURCE コールバック関数 (d3dumddi.h)
CreateResource 関数は、リソースを作成します。
構文
PFND3DDDI_CREATERESOURCE Pfnd3dddiCreateresource;
HRESULT Pfnd3dddiCreateresource(
HANDLE hDevice,
D3DDDIARG_CREATERESOURCE *unnamedParam2
)
{...}
パラメーター
hDevice
リソースの作成に使用されるディスプレイ デバイス (グラフィックス コンテキスト) へのハンドル。
unnamedParam2
pResource [in, out]
作成されるリソースを記述する D3DDDIARG_CREATERESOURCE 構造体へのポインター。
戻り値
CreateResource は、次のいずれかの値を返します。
リターン コード | 説明 |
---|---|
S_OK | リソースが正常に作成されました。 |
E_OUTOFMEMORY | CreateResource は、完了するために必要なメモリを割り当てませんでした。 |
D3DERR_NOTAVAILABLE | CreateResource は、メモリを割り当てることができない以外の理由でリソースを作成できませんでした。 CreateResource は、頂点バッファーまたはインデックス バッファーを作成する場合にのみ、このエラーを返します。 |
注釈
CreateResource の呼び出しには、サーフェスの一覧を含めることができます。 pResource パラメーターで指定されるD3DDDIARG_CREATERESOURCE構造体の SurfCount メンバーは、作成するサーフェスの数 (MIP マップ レベルを含む) を指定します。 たとえば、256 x 256x9 テクスチャ MIP マップ リソースには、 SurfCount メンバーと MIP マップ レベルの数の両方が 9 に設定されている 9 つのサーフェスのリストが含まれています。 9 つの MIP マップ レベルを含むキューブ マップでは、MIP マップ レベルの数を 9 に設定し 、SurfCount を 54 に設定する必要があります。 3 サーフェス スワップ チェーンでは 、SurfCount が 3 に設定され、MIP マップ レベルの数が 0 に設定されている必要があります。 MIP マップ レベルの数は、常に SurfCount の値以下であることに注意してください。
CreateResource 呼び出しに応答して、ユーザー モードディスプレイ ドライバーは pfnAllocateCb 関数を呼び出して、1 つ以上のメモリ割り当てを作成できます。 ユーザー モードディスプレイ ドライバーは、サーフェスごとに複数の割り当てを作成するか、すべてのサーフェスに対して 1 つの割り当てを作成するか、サーフェスごとに 1 つの割り当てを作成する必要があるかを判断する必要があります。 割り当ての詳細については、「 ビデオ メモリ管理と GPU スケジューリング」を参照してください。
リソースは、複数のデバイス (hDevice) とプロセスで共有できます。 ランタイムは、D3DDDIARG_CREATERESOURCEの Flags メンバーで SharedResource ビット フィールド フラグを設定することで、リソースを共有することを指定します。 このビット フィールド フラグが設定されている場合、ユーザー モードの表示ドライバーは、共有リソースに対する次の制限に従う必要があります。
- ユーザー モードのディスプレイ ドライバーは、それぞれ 1 回だけ pfnAllocateCb 関数と pfnDeallocateCb 関数を 呼び出すことができます。
- ユーザー モード ディスプレイ ドライバーは、リソースが最初に作成された後にリソースの追加の割り当てを作成することはできません。同様に、リソース自体が破棄された時点でのみリソース割り当てを破棄できます。
- ドライバーの CreateResource 関数または OpenResource 関数の呼び出しによって作成または開かれた共有リソースに対してユーザー モードディスプレイ ドライバーの DestroyResource 関数が呼び出されると、ドライバーは、リソースを破棄または閉じるには、D3DDDICB_DEALLOCATE 構造体の hResource メンバーを NULL 以外に設定し、D3DDDICB_DEALLOCATEの NumAllocations メンバーを 0 に設定する必要があります。 つまり、共有リソースに関連付けられている割り当てを個別に破棄したり閉じたりすることはできません。 pfnDeallocateCb の 1 回の呼び出しで、リソースを破棄するか、アトミックに閉じる必要があります。
- 割り当ての数は、リソースの種類に対して一貫している必要があります (つまり、同じリソースの種類を作成する別のプロセスでは、同じ数と種類の割り当てを生成する必要があります)。 さらに、これらのリソースの名前変更は許可されません。
- Flags メンバーの未定義のビットが予約されています。
- [フラグ] でプライマリ ビット フィールド フラグが設定されていない場合は、RefreshRate メンバーと Output メンバーが予約されます。
- RenderTarget、DecodeRenderTarget、または VideoProcessRenderTarget ビット フィールド フラグが Flags で設定されていない場合は、MultisampleType メンバーと MultisampleQuality メンバーが予約されます。
- VertexBuffer ビット フィールド フラグが Flags で設定されていない場合、Fvf メンバーは予約されます。
- Texture、CubeMap、Volume のビット フィールド フラグが Flags で設定されていない場合、MipLevels メンバーが予約されます。
新しい CreateResource DDI は、Microsoft Windows 2000 ディスプレイ ドライバー モデルの DdCreateSurface DDI とは次の点で異なります。
- 新しい CreateResource DDI では、サーフェスが明示的にアタッチされることはありません。 すべての添付ファイルは、アトミック作成によって暗黙的に示されます。
- 新しい CreateResource DDI では、キューブ マップの部分的な作成は許可されません。
ランタイムが頂点バッファーまたはインデックス バッファーの作成を要求し、メモリ不足以外の理由でユーザー モードのディスプレイ ドライバーがバッファーを作成できない場合 (ハードウェアサポートの不足など)、ドライバーはD3DERR_NOTAVAILABLEで失敗する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。 |
対象プラットフォーム | デスクトップ |
Header | d3dumddi.h (D3dumddi.h を含む) |