Direct Draw -> Back buffer obligatoire ? [C++] - Programmation
Marsh Posté le 24-07-2001 à 00:48:30
Salut
Ca fait longtemps que je n'utilise plus directdraw mais je vais essayer de me rappeler. Il me semble que au cas ou tu utilises un backbuffer ( DDSD_BACKBUFFERCOUNT utilisé ) tu ne dois pas ecrire directement dans la primary surface mais dans le backbuffer puis tu appelle primary->flip et ca commute le pointeur des 2 surfaces : interet : lors d'une animation rapide tu ne vois pas un decoupage a l'affichage (a cause du vertical refresh).
Par contre si tu ne veux pas de back buffer , essaie de ne pas utiliser DDSD_BACKBUFFERCOUNT dans les flags de la structure DDSURFACEDESC de la primary surface.
Mais bon, je peux t'assurer que le back buffer est tres utile.
( il y a des tests dans le SDK de directX qui te montre la diff entre les 2).
Enfin sache que dans DirectX8 , il n'y a plus de directdraw, tout est géré dans l'interface direct3D.
Marsh Posté le 23-07-2001 à 10:55:35
Est-on obligé d'utiliser le back buffer avec ddraw ?
Voici mon code, il compile mais ne marche pas -> Message d'erreur Windows
LPDIRECTDRAW dd;
DDSURFACEDESC ddsd;
LPDIRECTDRAWSURFACE lpDDSPrimary;
HDC hdc;
HWND hwnd;
char szFrontMsg[] = "Front Message";
DirectDrawCreate(NULL,&dd,NULL);
dd->SetCooperativeLevel(hwnd,DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
dd->SetDisplayMode(640,480,8);
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;
dd->CreateSurface(&ddsd,&lpDDSPrimary,NULL);
if (lpDDSPrimary->GetDC(&hdc) == DD_OK) //***ICI que ça plante***
{
SetBkColor(hdc,RGB(0,0,255));
SetTextColor(hdc,RGB(255,255,0));
TextOut(hdc,0,0,szFrontMsg,lstrlen(szFrontMsg));
lpDDSPrimary->ReleaseDC(hdc);
}
Sleep(5000);
if(dd != NULL)
{
if(lpDDSPrimary != NULL)
{
lpDDSPrimary->Release();
lpDDSPrimary = NULL;
}
dd->Release();
dd = NULL;
}