IDirectDraw インターフェイス
IDirectDraw インターフェイスは、DirectShow マルチメディア ストリーミング API で使われる DirectDraw オブジェクト上で公開されるが、便宜上 DirectShow のドキュメントに含まれている。
DirectDraw オブジェクトはディスプレイ ハードウェアを表す。このオブジェクトがインスタンス化するディスプレイ デバイスがハードウェア アクセラレーション機能を持っている場合、このオブジェクトはハードウェアによってアクセラレートされる。DirectDraw オブジェクトによって作成できるオブジェクトは、DirectDrawSurface オブジェクト、DirectDrawPalette オブジェクト、DirectDrawClipper オブジェクトの 3 つである。
DirectDraw オブジェクトは、作成するすべてのオブジェクトを管理する。このオブジェクトは、プライマリ サーフェイスが 8 bpp モードである場合のデフォルトのパレット、デフォルトのカラー キー値、ハードウェアのディスプレイ モードを制御する。また、割り当て済みのリソースとこれから割り当てるリソースも識別される。
ディスプレイ モードの変更は、DirectDraw の重要な機能の 1 つである。ディスプレイ モードの解像度は、他のアプリケーションが排他的に DirectDraw にアクセスしていない限り、いつでも変更できる。ディスプレイ モードのピクセル深度は、変更を要求しているアプリケーションが DirectDraw オブジェクトに排他的にアクセスしている場合にのみ変更できる。ディスプレイ モードを変更すると、すべての DirectDrawSurface オブジェクトはサーフェイス メモリを失い、機能しなくなる。これらのサーフェイスのメモリは、Restore メソッドを使って再割り当てする必要がある。
IUnknown から継承したメソッドに加えて、IDirectDraw インターフェイスは次のメソッドを公開する。
メソッド | 説明 |
Compact | まだ実装されていない。 |
CreateClipper | DirectDrawClipper オブジェクトを作成する。 |
CreatePalette | この DirectDraw オブジェクトに対する DirectDrawPalette オブジェクトを作成する。 |
CreateSurface | この DirectDraw オブジェクトに対する DirectDrawSurface オブジェクトを作成する。 |
DuplicateSurface | DirectDrawSurface オブジェクトを複製する。 |
EnumDisplayModes | ハードウェアが DirectDraw オブジェクトを介して公開するディスプレイ モードのうち、提供されたサーフェイス記述と互換性があるすべてのディスプレイ モードを列挙する。 |
EnumSurfaces | 指定された検索基準に合う、既存のまたは可能なサーフェイスをすべて列挙する。 |
FlipToGDISurface | GDI が書き込むサーフェイスをプライマリ サーフェイスにする。 |
GetCaps | デバイス ドライバ (ハードウェア) やハードウェア エミュレーション レイヤ (HEL) の未処理 (未解決ではない) 能力を格納する。 |
GetDisplayMode | 現在のディスプレイ モードを返す。 |
GetFourCCCodes | DirectDraw オブジェクトによってサポートされる FourCC コードを取得する。 |
GetGDISurface | GDI がプライマリ サーフェイスとして処理するサーフェイス メモリを現在表している DirectDrawSurface オブジェクトを返す。 |
GetMonitorFrequency | DirectDraw オブジェクトが動作するモニタの周波数を返す。 |
GetScanLine | モニタ上で現在描画されている走査線を返す。 |
GetVerticalBlankStatus | 垂直同期の状態を返す。 |
Initialize | DirectDraw オブジェクトを初期化する。 |
RestoreDisplayMode | プライマリ サーフェイスのディスプレイ デバイス ハードウェアのモードを、SetDisplayMode メソッドが変更する前の状態にリセットする。 |
SetCooperativeLevel | アプリケーションの最上位動作を決定する。 |
SetDisplayMode | ディスプレイ デバイス ハードウェアのモードを設定する。モードを変更する前に、SetCooperativeLevel を使って排他レベルのアクセスを設定する必要がある。 |
WaitForVerticalBlank | 呼び出し元が垂直同期間隔と同期できるようにする。 |