Platform SDK: DirectX

複合サーフェスとフリッピング チェーンの作成

[C++]

また、複合サーフェスを作成することもできる。複合サーフェスは、IDirectDraw7::CreateSurface メソッドの呼び出しで作成されたサーフェスの集合である。CreateSurface を呼び出すときに DDSCAPS_COMPLEX フラグを設定すると、DirectDraw は明示的に指定されたサーフェス以外に、暗に 1 つ以上のサーフェスを作成する。複合サーフェスは、単一サーフェスと同様に管理することができる。すなわち、IDirectDraw::Release メソッドの呼び出しですべてのサーフェスを解放することができ、また、IDirectDrawSurface7::Restore メソッドの呼び出しですべてのサーフェスをリストアすることができる。ただし、暗に作成されたサーフェスのアタッチは解除できない。詳細については、「IDirectDrawSurface7::DeleteAttachedSurface」を参照すること。

[Visual Basic]

また、複合サーフェスを作成することもできる。複合サーフェスは、DirectDraw7.CreateSurface メソッドの呼び出しで作成されたサーフェスの集合である。CreateSurface を呼び出すときに DDSCAPS_COMPLEX フラグを設定すると、DirectDraw は明示的に指定されたサーフェス以外に、暗に 1 つ以上のサーフェスを作成する。複合サーフェスは、単一サーフェスと同様に管理することができる。すなわち、DirectDrawSurface7.Restore メソッドの呼び出しですべてのサーフェスをリストアできる。ただし、暗に作成されたサーフェスのアタッチは解除できない。詳細については、「DirectDrawSurface7.DeleteAttachedSurface」を参照すること。

作成可能なもっとも有用な複合サーフェスの 1 つは、フリッピング チェーンである。通常、フリッピング チェーンはプライマリ サーフェス、および 1 つ以上のバック バッファからなる。DDSCAPS_FLIP フラグは、サーフェスがフリッピング チェーンの一部であることを示す。この方法でフリッピング チェーンを作成するには、DDSCAPS_COMPLEX フラグも設定しなくてはならない。

[C++]

次の例では、プライマリ サーフェス フリッピング チェーンの作成方法を示す。

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 を呼び出すごとにサーフェスが循環パターンで循環し、トリプル バッファ フリッピング環境を提供する。詳細については、「フリッピング サーフェス」を参照すること。

[Visual Basic]

次の例では、プライマリ サーフェス フリッピング チェーンの作成方法を示す。

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 能力フラグを必ず含むこと。

[C++]

IDirectDraw3 以前のインターフェイスでの CreateSurface メソッドとは異なり、深度バッファにアタッチされたレンダリング ターゲット サーフェスのフリッピング チェーンを作成するために、IDirectDraw7::CreateSurface を使用できない。IDirectDraw7::CreateSurface メソッドが受け取る DDSURFACEDESC2 構造体に、深度バッファビット深度を指定するフィールドを含むことはできない。このため、アプリケーションでは明示的に深度バッファ サーフェスを作成し、そのサーフェスをバックバッファ レンダーリング ターゲットにアタッチしなくてはならない。詳細については、Direct3D 直接モードの「深度バッファ」を参照すること。