Platform SDK: DirectX |
サーフェスまたは DirectDrawSurface オブジェクトは、ディスプレイ メモリの線形領域を表す。通常、サーフェスはディスプレイ カードのディスプレイ メモリに常駐しているが、システム メモリに存在することもできる。DirectDrawSurface オブジェクト作成の過程で特に指示されないかぎり、DirectDraw オブジェクトは、要求される能力で最高のパフォーマンスが得られる場所に DirectDrawSurface オブジェクトを置く。DirectDrawSurface オブジェクトは、ディスプレイ カード上の特化されたプロセッサを有効に利用でき、システム CPU と並行してタスクを実行する。
IDirectDraw7::CreateSurface メソッドを使用すると、1 つのサーフェス オブジェクト、複合サーフェス フリッピング チェーン、あるいは 3 次元サーフェスを作成することができる。CreateSurface メソッドは要求されたサーフェスまたはフリッピング チェーンを作成し、プライマリ サーフェスの IDirectDrawSurface7 インターフェイスへのポインタを取得する。このインターフェイスから、オブジェクトはその機能を公開する。
IDirectDrawSurface7 インターフェイスにより、IDirectDrawSurface7::BltFast などのブリット メソッドからメモリに間接的にアクセスできる。サーフェス オブジェクトは、GDI 関数で使えるディスプレイへのデバイス コンテキストを提供できる。さらに、IDirectDrawSurface7 メソッドを使うと、ディスプレイ メモリに直接アクセスすることができる。たとえば、IDirectDrawSurface7::Lock メソッドを使ってディスプレイ メモリをロックして、そのサーフェスに対応するアドレスを取得することができる。ディスプレイ メモリのアドレスは、表示されるフレーム バッファ メモリ (プライマリ サーフェス) や、非表示のバッファ (オフスクリーン、またはオーバーレイ サーフェス) を指したりすることもある。通常、非表示のバッファはディスプレイ メモリに常駐するが、ハードウェア制限により要求されたり、DirectDraw がソフトウェアのエミュレーションを行ったりする場合、システム メモリに作成されることもある。さらに、IDirectDrawSurface7 インターフェイスは、パレットの設定や取得に使ったり、あるいはフリッピング チェーンやオーバーレイなどの特定のタイプやサーフェスと共に作用したりするために使う他のメソッドを拡張する。
DirectDraw7.CreateSurface メソッドを使用すると、1 つのサーフェス オブジェクト、複合サーフェス フリッピング チェーン、あるいは 3 次元サーフェスを作成することができる。CreateSurface メソッドは要求されたサーフェスまたはフリッピング チェーンを作成し、プライマリ サーフェスの IDirectDrawSurface7 インターフェイスへのポインタを取得する。このインターフェイスから、オブジェクトはその機能を公開する。
DirectDrawSurface7 オブジェクトにより、DirectDrawSurface7.BltFast などのブリット メソッドからメモリに間接的にアクセスできる。サーフェス オブジェクトは、GDI 関数で使えるディスプレイへのデバイス コンテキストを提供できる。さらに、DirectDrawSurface7 メソッドを使うと、ディスプレイ メモリに直接アクセスすることができる。たとえば、DirectDrawSurface7.Lock メソッドを使ってディスプレイ メモリをロックして、そのサーフェスを取得できる。ディスプレイ メモリは、表示されるフレーム バッファ メモリ (プライマリ サーフェス) や、非表示のバッファ (オフスクリーン、またはオーバーレイ サーフェス) になることもある。通常、非表示のバッファはディスプレイ メモリに常駐するが、ハードウェア制限により要求されたり、DirectDraw がソフトウェアのエミュレーションを行ったりする場合、システム メモリに作成されることもある。さらに、IDirectDrawSurface7 インターフェイスは、パレットの設定や取得に使ったり、あるいはフリッピング チェーンやオーバーレイなどの特定のタイプやサーフェスと共に作用したりするために使う他のメソッドを拡張する。
次に示す図から、すべてのサーフェスは DirectDraw オブジェクトにより作成され、パレットと密接に関連して用いられることもあることがわかる。個々のサーフェス オブジェクトにパレットを割り当てられるが、パレットは深度が 8 ビット以下のピクセル フォーマットを使うプライマリ サーフェス以外では要求されない。