Microsoft Windows CE 3.0  

Creating Complex Surfaces and Flipping Chains

This is retired content. This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This content may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist.

You can also create complex surfaces. A complex surface is a set of surfaces created with a single call to the IDirectDraw4::CreateSurfacemethod. If the DDSCAPS_COMPLEX flag is set when you call CreateSurfacecall, DirectDraw implicitly creates one or more surfaces in addition to the surface explicitly specified. You manage complex surfaces just like a single surfacea single call to the IDirectDraw::Releasemethod releases all surfaces, and a single call to the IDirectDrawSurface5::Restoremethod restores them all. However, implicitly created surfaces cannot be detached. For more information, see IDirectDrawSurface5::DeleteAttachedSurface.

One of the most useful complex surfaces you can create is a flipping chain. Usually, a flipping chain is made of a primary surface and one or more back buffers. The DDSCAPS_FLIP flag indicates that a surface is part of a flipping chain. Creating a flipping chain this way requires that you also include the DDSCAPS_COMPLEX flag.

The following example shows how to prepare for creating a primary surface flipping chain.

DDSURFACEDESC2 ddsd2; ddsd2.dwSize =
sizeof(ddsd2); // Tell DirectDraw which members are valid.
ddsd2.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; // Request a
primary surface with a single // back buffer ddsd2.ddsCaps.dwCaps =
ddsd2.dwBackBufferCount = 1;

The previous example constructs a double-buffered flipping environmenta single call to the IDirectDrawSurface5::Flipmethod exchanges the surface memory of the primary surface and the back buffer. If you specify 2 for the value of the dwBackBufferCountmember of the DDSURFACEDESC2structure, two back buffers are created, and each call to Fliprotates the surfaces in a circular pattern, providing a triple-buffered flipping environment. For more information, see Flipping Surfaces.

Note   To create a flipping chain that comprises surfaces that will be used as 3-D render targets, be sure to include the DDSCAPS_3DDEVICE capability flag in the surface description, as well as the DDSCAPS_COMPLEX and DDSCAPS_FLIP flags.
Unlike the CreateSurfacemethod exposed by the IDirectDraw3and earlier interfaces, you cannot use IDirectDraw4::CreateSurfaceto implicitly create a flipping chain of render target surfaces with an attached depth-buffer. The DDSURFACEDESC2structure that the IDirectDraw4::CreateSurfacemethod accepts doesn't contain a field to specify a depth-buffer bit depth. As a result, applications must create a depth-buffer surface explicitly, then attach it to the back-buffer render target surface.

 Last updated on Tuesday, May 18, 2004

© 2004 Microsoft Corporation. All rights reserved.