[C++] Direct Draw -> Back buffer obligatoire ?

Direct Draw -> Back buffer obligatoire ? [C++] - Programmation

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;
 }

Reply

Marsh Posté le 23-07-2001 à 10:55:35   

Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed