After the DDSURFACEDESC structure is filled, you can use it and lpDD, the pointer to the DirectDraw object that was created by the DirectDrawCreate function, to call the IDirectDraw2::CreateSurface method, as shown in the following example:
ddrval = lpDD->CreateSurface(&ddsd, &lpDDSPrimary, NULL);
if(ddrval == DD_OK)
{
// lpDDSPrimary points to the new surface.
}
else
{
// The surface was not created.
return FALSE;
}
The lpDDSPrimary parameter will point to the primary surface returned by IDirectDraw2::CreateSurface if the call succeeds.
After the pointer to the primary surface is available, you can use the IDirectDrawSurface3::GetAttachedSurface method to retrieve a pointer to the back buffer, as shown in the following example:
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
ddrval = lpDDSPrimary->GetAttachedSurface(&ddcaps, &lpDDSBack);
if(ddrval == DD_OK)
{
// lpDDSBack points to the back buffer.
}
else
{
return FALSE;
}
By supplying the address of the surface's primary surface and by setting the capabilities value with the DDSCAPS_BACKBUFFER flag, the lpDDSBack parameter will point to the back buffer if the IDirectDrawSurface3::GetAttachedSurface call succeeds.