Flipping
C'est quoi ?
Le flipping permet d'échanger les pointeurs entre l'écran physique et l'écran logique (primary buffer et back buffer)
Création de chaine de permutation (rappel)
Pour recourir au double, triple ou n tamponnage, il faut créer des surfaces en mémoire vidéo que l'on nommera Back Buffer identiquent à la primary buffer.
Il faut spécifier le nombre de tampon lors de la création de la surface primaire:
DDSURFACEDESC2 ddsd;
DDSCAPS2 ddscaps;
ZeroMemory (&ddsd, szeof (ddsd));
ddsd.dwSize = sizeof (ddsd);
ddsd.dwFlag = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.ddsdCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP |
DDSCAPS_COMPLEX; // pour indiquer qu'il s'agit d'une surface complexe (composé
de plusieurs surfaces) et qu'elles peuvent être permutées.
ddsd.dwBackBufferCount = 1; // pour se créer un double tamponnage
ddrval = lpDD->CreateSurface ( &ddsd, &lpDDSPrimary, NULL);
Il faut ensuite se créer les back buffer : GetAttachedSurface
Permutation de surfaces
Flip : Surface à permuter avec la surface primaire.
HRESULT Flip(
LPDIRECTDRAWSURFACE lpDDSurfaceTargetOverride,
DWORD dwFlags
);
En entrée:
lpDDSurfaceTargetOverride, on ne se fatigue pas, on le mettra à NULL pour un double tamponnage. Sinon, il faudra indiquer le pointeur d'un back buffer
dwFlags 0 ou DDFLIP_WAIT pour forcer la fonction à attendre une réussite du flipping.
En sortie:
DD_OK
DDERR_INVALIDPARAMS
DDERR_INVALIDOBJECT
DDERR_SURFACELOST
DDERR_SURFACEBUSY
DDERR_GENERIC
DDERR_WASSTILLDRAWING
DDERR_UNSUPPORTED
DDERR_NOTFLIPPABLE
DDERR_NOFLIPHW