|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.|
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 IDirectDraw4::CreateSurfacemethod, you can create a single surface object, complex surface -flipping chains, or three-dimensional surfaces. The CreateSurfacemethod creates the requested surface or flipping chain and retrieves a pointer to the primary surface's IDirectDrawSurface5interface through which the object exposes its functionality.
The IDirectDrawSurface5interface enables you to indirectly access memory through blit methods, such as IDirectDrawSurface5::BltFast. The surface object can provide a device context to the display that you can use with GDI functions. Additionally, you can use IDirectDrawSurface5methods to directly access display memory. For example, you can use the IDirectDrawSurface5::Lockmethod 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 IDirectDrawSurface5interface 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 this 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 aren't required for anything but primary surfaces that use pixel formats of 8-bits in depth or less.
Last updated on Tuesday, May 18, 2004