Platform SDK: DirectX |
ハードウェアがハードウェア アブストラクション レイヤ (HAL) を通してある機能をサポートしない場合、DirectDraw はそれをエミュレートしようとする。このエミュレートされた機能は、ハードウェア エミュレーション レイヤ (HEL) から提供される。HAL と同様に、HEL はその能力を DirectDraw に提供する。また HAL 同様、アプリケーションは決して直接 HEL に作用しない。その結果、ある機能がハードウェアによるか、または HEL からサポートされるかどうかに関わりなく、ほとんどすべての主要機能が透過型サポートとなる。
ソフトウェア エミュレーションは、明らかにハードウェア機能が提供するパフォーマンスには及ばない。C++ の IDirectDraw7::GetCaps メソッド または Visual Basic の DirectDraw7.GetCaps メソッドを使って、ハードウェアのサポートする機能を照会することができる。アプリケーションの初期設定時にこれらの能力を調べると、アプリケーション パラメータを調整することができ、ハードウェア パフォーマンスのさまざまなレベルに最適なパフォーマンスを提供できる。
ハードウェアによりサポートされた機能とエミュレーションの組み合わせによっては、エミュレーションだけの場合よりパフォーマンスが落ちる場合がある。たとえば、ディスプレイ デバイス ドライバが DirectDraw をサポートし、伸縮ブリットをサポートしない場合、ビデオ メモリ サーフェスから伸縮ブリットを行うと、著しいパフォーマンスの低下がみられる。このパフォーマンスの低下が生じるのは、ビデオ メモリの方がシステム メモリよりも遅い場合が多く、ビデオ メモリ サーフェスにアクセスするときに CPU が待たされるからである。アプリケーションがハードウェアでサポートしない機能を使うときは、システム メモリにサーフェスを作成した方がいい場合がある。これにより、CPU がビデオ メモリにアクセスするときに生じるパフォーマンスの低下を避けることができる。
詳細については、「ハードウェア アブストラクション レイヤ (HAL)」を参照すること。