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