Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4259 connectés 

 


Dernière réponse
Sujet : [C++] Direct Draw -> Back buffer obligatoire ?
xilebo 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.

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
xilebo 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.
antsite 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;
 }

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)