Platform SDK: DirectX

サーフェスとは?

サーフェスまたは DirectDrawSurface オブジェクトは、ディスプレイ メモリの線形領域を表す。通常、サーフェスはディスプレイ カードのディスプレイ メモリに常駐しているが、システム メモリに存在することもできる。DirectDrawSurface オブジェクト作成の過程で特に指示されないかぎり、DirectDraw オブジェクトは、要求される能力で最高のパフォーマンスが得られる場所に DirectDrawSurface オブジェクトを置く。DirectDrawSurface オブジェクトは、ディスプレイ カード上の特化されたプロセッサを有効に利用でき、システム CPU と並行してタスクを実行する。

[C++]

IDirectDraw7::CreateSurface メソッドを使用すると、1 つのサーフェス オブジェクト、複合サーフェス フリッピング チェーン、あるいは 3 次元サーフェスを作成することができる。CreateSurface メソッドは要求されたサーフェスまたはフリッピング チェーンを作成し、プライマリ サーフェスIDirectDrawSurface7 インターフェイスへのポインタを取得する。このインターフェイスから、オブジェクトはその機能を公開する。

IDirectDrawSurface7 インターフェイスにより、IDirectDrawSurface7::BltFast などのブリット メソッドからメモリに間接的にアクセスできる。サーフェス オブジェクトは、GDI 関数で使えるディスプレイへのデバイス コンテキストを提供できる。さらに、IDirectDrawSurface7 メソッドを使うと、ディスプレイ メモリに直接アクセスすることができる。たとえば、IDirectDrawSurface7::Lock メソッドを使ってディスプレイ メモリをロックして、そのサーフェスに対応するアドレスを取得することができる。ディスプレイ メモリのアドレスは、表示されるフレーム バッファ メモリ (プライマリ サーフェス) や、非表示のバッファ (オフスクリーン、またはオーバーレイ サーフェス) を指したりすることもある。通常、非表示のバッファはディスプレイ メモリに常駐するが、ハードウェア制限により要求されたり、DirectDraw がソフトウェアのエミュレーションを行ったりする場合、システム メモリに作成されることもある。さらに、IDirectDrawSurface7 インターフェイスは、パレットの設定や取得に使ったり、あるいはフリッピング チェーンやオーバーレイなどの特定のタイプやサーフェスと共に作用したりするために使う他のメソッドを拡張する。

[Visual Basic]

DirectDraw7.CreateSurface メソッドを使用すると、1 つのサーフェス オブジェクト、複合サーフェス フリッピング チェーン、あるいは 3 次元サーフェスを作成することができる。CreateSurface メソッドは要求されたサーフェスまたはフリッピング チェーンを作成し、プライマリ サーフェスIDirectDrawSurface7 インターフェイスへのポインタを取得する。このインターフェイスから、オブジェクトはその機能を公開する。

DirectDrawSurface7 オブジェクトにより、DirectDrawSurface7.BltFast などのブリット メソッドからメモリに間接的にアクセスできる。サーフェス オブジェクトは、GDI 関数で使えるディスプレイへのデバイス コンテキストを提供できる。さらに、DirectDrawSurface7 メソッドを使うと、ディスプレイ メモリに直接アクセスすることができる。たとえば、DirectDrawSurface7.Lock メソッドを使ってディスプレイ メモリをロックして、そのサーフェスを取得できる。ディスプレイ メモリは、表示されるフレーム バッファ メモリ (プライマリ サーフェス) や、非表示のバッファ (オフスクリーン、またはオーバーレイ サーフェス) になることもある。通常、非表示のバッファはディスプレイ メモリに常駐するが、ハードウェア制限により要求されたり、DirectDraw がソフトウェアのエミュレーションを行ったりする場合、システム メモリに作成されることもある。さらに、IDirectDrawSurface7 インターフェイスは、パレットの設定や取得に使ったり、あるいはフリッピング チェーンやオーバーレイなどの特定のタイプやサーフェスと共に作用したりするために使う他のメソッドを拡張する。

次に示す図から、すべてのサーフェスは DirectDraw オブジェクトにより作成され、パレットと密接に関連して用いられることもあることがわかる。個々のサーフェス オブジェクトにパレットを割り当てられるが、パレットは深度が 8 ビット以下のピクセル フォーマットを使うプライマリ サーフェス以外では要求されない。