Platform SDK: DirectX |
また、複合サーフェスを作成することもできる。複合サーフェスは、IDirectDraw7::CreateSurface メソッドの呼び出しで作成されたサーフェスの集合である。CreateSurface を呼び出すときに DDSCAPS_COMPLEX フラグを設定すると、DirectDraw は明示的に指定されたサーフェス以外に、暗に 1 つ以上のサーフェスを作成する。複合サーフェスは、単一サーフェスと同様に管理することができる。すなわち、IDirectDraw::Release メソッドの呼び出しですべてのサーフェスを解放することができ、また、IDirectDrawSurface7::Restore メソッドの呼び出しですべてのサーフェスをリストアすることができる。ただし、暗に作成されたサーフェスのアタッチは解除できない。詳細については、「IDirectDrawSurface7::DeleteAttachedSurface」を参照すること。
また、複合サーフェスを作成することもできる。複合サーフェスは、DirectDraw7.CreateSurface メソッドの呼び出しで作成されたサーフェスの集合である。CreateSurface を呼び出すときに DDSCAPS_COMPLEX フラグを設定すると、DirectDraw は明示的に指定されたサーフェス以外に、暗に 1 つ以上のサーフェスを作成する。複合サーフェスは、単一サーフェスと同様に管理することができる。すなわち、DirectDrawSurface7.Restore メソッドの呼び出しですべてのサーフェスをリストアできる。ただし、暗に作成されたサーフェスのアタッチは解除できない。詳細については、「DirectDrawSurface7.DeleteAttachedSurface」を参照すること。
作成可能なもっとも有用な複合サーフェスの 1 つは、フリッピング チェーンである。通常、フリッピング チェーンはプライマリ サーフェス、および 1 つ以上のバック バッファからなる。DDSCAPS_FLIP フラグは、サーフェスがフリッピング チェーンの一部であることを示す。この方法でフリッピング チェーンを作成するには、DDSCAPS_COMPLEX フラグも設定しなくてはならない。
次の例では、プライマリ サーフェス フリッピング チェーンの作成方法を示す。
DDSURFACEDESC2 ddsd2; ddsd2.dwSize = sizeof(ddsd2); // どのメンバが有効か DirectDraw に伝える。 ddsd2.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; // 1 つのバック バッファと共に、 // プライマリ サーフェスを要求する。 ddsd2.ddsCaps.dwCaps = DDSCAPS_COMPLEX | DDSCAPS_FLIP | DDSCAPS_PRIMARYSURFACE; ddsd2.dwBackBufferCount = 1;
上記の例は、ダブルバッファ フリッピング環境を構築するものである。すなわち、IDirectDrawSurface7::Flip メソッドを呼び出すと、プライマリ サーフェスとバック バッファのサーフェス メモリが交換される。DDSURFACEDESC2 構造体の dwBackBufferCount メンバの値に 2 を指定すると、2 つのバック バッファが作成される。また、Flip を呼び出すごとにサーフェスが循環パターンで循環し、トリプル バッファ フリッピング環境を提供する。詳細については、「フリッピング サーフェス」を参照すること。
次の例では、プライマリ サーフェス フリッピング チェーンの作成方法を示す。
Dim ddsd2 As DDSURFACEDESC2 ' どのメンバが有効か DirectDraw に伝える。 ddsd2.lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT ' 1 つのバック バッファと共に、 ' プライマリ サーフェスを要求する。 ddsd2.ddsCaps.lCaps = DDSCAPS_COMPLEX Or DDSCAPS_FLIP Or _ DDSCAPS_PRIMARYSURFACE; ddsd2.lBackBufferCount = 1
上記の例は、ダブルバッファ フリッピング環境を構築するものである。すなわち、DirectDrawSurface7.Flip メソッドを呼び出すと、プライマリ サーフェスとバック バッファのサーフェス メモリが交換される。DDSURFACEDESC2 型の IBackBufferCount メンバの値に 2 を指定すると、2 つのバック バッファが作成される。また、Flip を呼び出すごとにサーフェスが循環パターンで循環し、トリプル バッファフリッピング環境を提供する。詳細については、「フリッピング サーフェス」を参照すること。
注 : 3D レンダリング ターゲットとして使用されるサーフェスから成るフリッピング チェーンを作成するには、DDSCAPS_COMPLEX および DDSCAPS_FLIP フラグのほかに、サーフェス記述の DDSCAPS_3DDEVICE 能力フラグを必ず含むこと。
IDirectDraw3 以前のインターフェイスでの CreateSurface メソッドとは異なり、深度バッファにアタッチされたレンダリング ターゲット サーフェスのフリッピング チェーンを作成するために、IDirectDraw7::CreateSurface を使用できない。IDirectDraw7::CreateSurface メソッドが受け取る DDSURFACEDESC2 構造体に、深度バッファビット深度を指定するフィールドを含むことはできない。このため、アプリケーションでは明示的に深度バッファ サーフェスを作成し、そのサーフェスをバックバッファ レンダーリング ターゲットにアタッチしなくてはならない。詳細については、Direct3D 直接モードの「深度バッファ」を参照すること。