What Are Surfaces? (Windows Embedded CE 6.0)
1/6/2010
A surface, or DirectDrawSurface object, represents a linear area of display memory. A surface usually resides in the display memory of the display card, although surfaces can exist in system memory.
Unless specifically instructed otherwise during the creation of the DirectDrawSurface object, DirectDraw object will put the DirectDrawSurface object wherever the best performance can be achieved given the requested capabilities.
DirectDrawSurface objects can take advantage of specialized processors on display cards, not only to perform certain tasks faster, but to perform some tasks in parallel with the system CPU.
Using the IDirectDraw::CreateSurface method, you can create a single surface object, complex surface -flipping chains, or three-dimensional surfaces. The CreateSurface method creates the requested surface or flipping chain and retrieves a pointer to the primary surface's IDirectDrawSurface interface through which the object exposes its functionality.
The surface object can provide a device context to the display that you can use with GDI functions. Additionally, you can use IDirectDrawSurface methods to directly access display memory. For example, you can use the IDirectDrawSurface::Lock method to lock the display memory and retrieve the address corresponding to that surface.
Addresses of display memory might point to visible frame buffer memory (primary surface) or to nonvisible buffers (off-screen or overlay surfaces).
Nonvisible buffers usually reside in display memory, but can be created in system memory if required by hardware limitations or if DirectDraw is performing software emulation.
In addition, the IDirectDrawSurface interface extends other methods that you can use to set or retrieve palettes, or to work with specific types or surfaces, like flipping chains or overlays.
From the following illustration, you can see that all surface are created by a DirectDraw object and are often used closely with palettes. Although each surface object can be assigned a palette, palettes are not required for anything but primary surfaces that use pixel formats of 8-bits in depth or less.