Domanda

È il doppio buffer ancora necessaria quando Desktop Composition è abilitato?

Application Compatibility Guide di Microsoft:

  

Graphical Device Interface (GDI)

     

Prima di Windows Vista e Windows   Server 2008, un handle di finestra (HWND)   è stato dipinto direttamente allo schermo,   che ha avuto alcuni benefici, ma   limitata modo in cui Windows potrebbe visualizzare e   gestire finestre di primo livello. in Windows   Vista e Windows Server 2008, tutte le   finestre di primo livello sono resi a un   off-schermo bitmap (simile a   WS_EX_LAYERED), e la finestra del desktop   Responsabile combina le immagini insieme   per disegnare il desktop.

Sembra che tutto il rendering ora è fatto a una bitmap fuori schermo:

  

le finestre sono rese a una bitmap fuori schermo

È corretto?

Il motivo che mi chiedo è perché vedo ancora tremolante durante il ciclo di verniciatura standard:

  • WM_ERASEBKGND
  • WM_PAINT

mentre composizione del desktop è attivata:

alt text

avrei assunto che tra le chiamate a

   BeginPaint(hWnd, paintStructure);
   ...
   EndPaint(hWnd, paintStructure);

che tutta la pittura sarebbe successo a un buffer di nuovo:

  

le finestre sono rese a una bitmap fuori schermo

Nel frattempo il tampone frontale sarebbe rimasto inalterato.

È stato utile?

Soluzione

  

È corretto?

Yup (che è come le miniature in grado di mostrare parti della finestra che sono attualmente oscurato).

di rendering di DWM dello schermo è doppio buffer. Tuttavia, se si afferra il buffer betewen cancellazione e la pittura ... sta andando a presentarsi come un manufatto visibile. Quindi è ancora necessario fare doppio buffer. Il doppio buffering avviene sul desktop (cioè esso trae la visualizzazione del desktop dopo completamente e poi ribalta), non sulle buffer off-schermo che ogni finestra viene attirata.

Altri suggerimenti

Bene, la pittura a una bitmap fuori schermo solo permette la DWM per compositi le finestre come si ama senza dover attendere per l'applicazione di ridisegnare (come è il caso in XP quando si sposta le finestre su un altro, per esempio) .

Questo non significa che il disegno a quella superficie fuori schermo automagically riduce lo sfarfallio. Se si cancella la finestra e poi ridisegnare e tra i due azioni la DWM ridisegna lo schermo (cosa che fa circa 60 volte al secondo), poi, naturalmente, si vedrà tremolante.

Non risolve il problema "finestre bianche" quando un'applicazione non ridisegna abbastanza velocemente e si riduce anche ridisegnare a causa di finestre sovrapposte. Ma non aiuta contro lo sfarfallio. Il DWM non ha modo di sapere che la tua operazione di disegno non era ancora completa e che si desidera avere la vecchia immagine della finestra visualizzata solo dopo aver disegnato di nuovo il contenuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top