Microsoft DirectX 8.0 |
注 : このインターフェイスの使用は避けること。新しいアプリケーションで使用してはならない。
IDirectDraw3 インターフェイスは、IDirectDrawFactory::CreateDirectDraw メソッドを通じて DirectDraw オブジェクトを作成したアプリケーションから利用できる。このメソッドは、IDirectDraw インターフェイスへのポインタのアドレスを取得する。アプリケーションでは、これを使って IDirectDraw3 インターフェイスを照会することができる。
IDirectDraw3 インターフェイスは、IDirectDraw3::GetSurfaceFromDC メソッドを追加し、IDirectDraw3::CreateSurface メソッドで異なった動作を提供することにより、IDirectDraw インターフェイスと IDirectDraw2 インターフェイスを拡張したものである。
vtable 順のメソッド
IUnknown メソッド 説明 QueryInterface サポートされているインターフェイスへのポインタを取得する。 AddRef 参照カウントをインクリメントする。 Release 参照カウントをデクリメントする。 IDirectDraw3 メソッド 説明 CreateSurface DirectDraw オブジェクトから DirectDrawSurface オブジェクトを作成する。 GetSurfaceFromDC デバイス コンテキストのハンドルから IDirectDrawSurface インターフェイスへのポインタを取得する。
DirectDraw オブジェクトから DirectDrawSurface オブジェクトを作成する。
構文
STDMETHOD CreateSurface( LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRECTDRAWSURFACE FAR *lplpDDSurface, IUnknown FAR *pUnkOuter ) PURE;
パラメータ
- lpDDSurfaceDesc
- [in] 要求するサーフェスを記述する DDSURFACEDESC 構造体へのポインタ。このメソッドを呼び出す前に、使用しない DDSURFACEDESC メンバすべてを 0 に設定しなければならない。DDSCAPS 構造体は DDSURFACEDESC のメンバである。
- lplpDDSurface
- [out] 有効な DirectDrawSurface ポインタで初期化するポインタのアドレス (呼び出しが成功した場合)。
- pUnkOuter
- [in] 内側のオブジェクトの IUnknown インターフェイスと集成される外側のオブジェクトの IUnknown インターフェイスへのポインタ。
戻り値
成功した場合は、DD_OK を返す。それ以外の場合は、次のいずれかのエラー値を返す。
DDERR_INCOMPATIBLEPRIMARY プライマリ サーフェスの作成要求が既存のプライマリ サーフェスと一致していない。 DDERR_INVALIDCAPS コールバック関数に渡された 1 つ以上の能力ビットが不正である。 DDERR_INVALIDOBJECT DirectDraw が無効な DirectDraw オブジェクトへのポインタを受け取った。 DDERR_INVALIDPARAMS メソッドに渡された 1 つ以上のパラメータが不正である。 DDERR_INVALIDPIXELFORMAT 指定されたピクセル フォーマットが無効である。 DDERR_NOALPHAHW アルファ アクセラレーション ハードウェアが存在しないか、利用できないため、要求された処理が失敗した。 DDERR_NOCOOPERATIVELEVELSET サーフェスの作成前に IDirectDraw2::SetCooperativeLevel メソッドが呼び出されなかった。 DDERR_NODIRECTDRAWHW ハードウェア専用 DirectDraw オブジェクトを作成できない。ドライバはハードウェアをサポートしない。 DDERR_NOEMULATION ソフトウェア エミュレーションが利用できない。 DDERR_NOEXCLUSIVEMODE アプリケーションに対して排他モードが要求されたが、アプリケーションに排他モードがない。 DDERR_NOFLIPHW 表示されるサーフェスをフリッピングできない。 DDERR_NOMIPMAPHW ミップマップ テクスチャをマッピングするハードウェアが存在しないか、利用できないため、処理を実行できない。 DDERR_NOOVERLAYHW オーバーレイ ハードウェアが存在しないか、利用できないため、処理を実行できない。 DDERR_NOZBUFFERHW Z バッファに対するハードウェア サポートがないため、ディスプレイ メモリでの Z バッファ作成、あるいは Z バッファを使用したブリットが実行できない。 DDERR_OUTOFMEMORY DirectDraw が利用できるメモリが足りないため、処理を実行できない。 DDERR_OUTOFVIDEOMEMORY DirectDraw が利用できるディスプレイ メモリが足りないため、処理を実行できない。 DDERR_PRIMARYSURFACEALREADYEXISTS アプリケーションは既にプライマリ サーフェスを作成している。 DDERR_UNSUPPORTEDMODE 処理がサポートされていない。
注意
pUnkOuter パラメータに NULL を渡すと、lplpDDSurface パラメータに DirectDraw サーフェスのアドレスが返される。また、内側のインターフェイスと集成する外側のインターフェイスへのポインタを渡すと、lplpDDSurface パラメータに対応する IUnknown ポインタが返される。
現在の DirectDrawEx は、DDSCAPS 構造体の dwcaps メンバに対応する DDSCAPS_DATAEXCHANGE フラグも提供する。このフラグは、Ddrawex.h に DDSCAPS_SYSTEMMEMORY と DDSCAPS_VIDEOMEMORY の組み合わせとして定義されている。DDSCAPS_DATAEXCHANGE フラグを使ってサーフェスを作成した場合、十分なビデオ メモリが利用できないと、サーフェスが自動的にビデオ メモリへ移される。それ以外の場合には、システム メモリ サーフェスが作成される。また、このフラグを DDSCAPS_OWNDC フラグと共に設定すると、アプリケーションから IDirectDrawSurface::GetDC メソッドを呼び出すことにより、サーフェスのロックを保持せずに、デバイス コンテキストを不要になるまでロックできる。
このメソッドは、IDirectDraw::CreateSurface メソッドと IDirectDraw2::CreateSurface メソッドを呼び出す。
デバイス コンテキストのハンドルから IDirectDrawSurface インターフェイスへのポインタを取得する。
構文
STDMETHOD GetSurfaceFromDC(
HDC hdc,
IDirectDrawSurface **ppSurface
) PURE;
パラメータ
- hdc
- [in] デバイス コンテキスト (DC) のハンドル。
- ppSurface
- [out] IDirectDrawSurface インターフェイスへのポインタのアドレス。
戻り値
成功した場合は、S_OK を返す。それ以外の場合は、次のいずれかの値を返す。
E_POINTER IDirectDrawSurface へのポインタが無効。 DDERR_NOTFOUND 要求された項目が見つからない。