CREATION DE SURFACE
Une surface sous DirectDraw est une zone rectangulaire servant à stocker des images. Elles servent aussi à stocker des bitmaps et à la représentation de l'écran video
HRESULT CreateSurface(
LPDDSURFACEDESC2 lpDDSurfaceDesc2,
LPDIRECTDRAWSURFACE7 FAR *lplpDDSurface,
IUnknown FAR *pUnkOuter
);
Type | Description | Valeur |
lpDDSurfaceDesc2 | Pointeur sur une structure DDSURFACEDESC2 contenant la description de la surface | |
lplpDDSurface | Adresse d'une variable destinée à recevoir un pointeur vers une interface IDIRECTDRAWSURFACE7 | |
pUnkOuter | Réservé (doit etre a 0) | 0=valeur obligatoire |
En cas de succés, la fonction renvoie la valeur DD_OK.
Le clipper est utilisé afin d'éviter les debordements et les sorties de surface.
HRESULT CreateClipper(
DWORD dwFlags,
LPDIRECTDRAWCLIPPER FAR *lplpDDClipper,
IUnknown FAR *pUnkOuter
);
Type | Description | Valeur |
dwFlags | Non utilisé. Doit être à zéro. | 0=Valeur obligatoire. |
lplpDDClipper | Adresse d'une variable servant à recevoir un pointeur IDirectDrawClipper | |
pUnkOuter | Réservé. Doit être à zéro. | 0=Valeur obligatoire. |
En cas de succés, la fonction renvoie la valeur DD_OK.
Un exemple (celui de boulder):
//Creation du clipper
hRet = lpDD->CreateClipper(NULL,&lpClip,NULL);
if (hRet != DD_OK)
{
MessageBox(NULL,"Erreur clipper","Boulder",MB_OK);
return FALSE;
}
// Creation de la surface primaire + backbuffer
lpClip->SetHWnd(0,hWnd); //note: le pointeur hWnd sera obtenu lors de la creation de la fenêtre de l'application.
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS|DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1; hRet = lpDD->CreateSurface( &ddsd, &FondEcran, NULL
);
if (hRet!=DD_OK)
{
MessageBox(NULL,"Erreur création surface primaire","Boulder",MB_OK);
return FALSE;
}
//Dans cet exemple le code cree aussi un BackBuffer.
Remarques tres importantes:
Les 2 lignes suivantes sont très importantes:
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize = sizeof( ddsd );
Il est imperatif d'initialiser la structure avec la 1er ligne et de definir la taille de la structure avec la 2ème. Si vous ne le faites pas vous risquez d'avoir des valeurs erronées et d'endomager la mémoire. Dans ce cas la seule chose à faire est le reboot !.