Frage

Ist Double-Buffering noch erforderlich, wenn Desktop-Zusammensetzung aktiviert ist?

In Microsofts Handbuch zur Anwendungskompatibilität :

  

Graphical Device Interface (GDI)

     

Vor Windows Vista und Windows   Server 2008, ein Fenster-Handle (HWND)   wurde direkt auf den Bildschirm gemalt,   die hatte gewisse Vorteile, aber   begrenzt, wie Windows könnte angezeigt werden und   verwalten Fenster der obersten Ebene. in Windows   Vista und Windows Server 2008, die alle   Fenster der obersten Ebene sind eine gerenderte   Off-Screen-Bitmap (ähnlich   WS_EX_LAYERED) und der Desktop Window   Manager kombiniert die Bilder zusammen   den Desktop zu ziehen.

Es klingt wie alle Rendering nun zu einem Off-Screen-Bitmap gemacht wird:

  

Fenster zu einem Off-Screen-Bitmap dargestellt werden

Ist das richtig?

Der Grund, warum ich frage ist, weil ich noch während der Standardfarbe Zyklus sehen Flimmern:

  • WM_ERASEBKGND
  • WM_PAINT

, während Desktop-Zusammensetzung aktiviert ist:

Ich habe angenommen, dass zwischen den Anrufen zu

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

, dass alle Gemälde zu einem hinteren Puffer passieren würden:

  

Fenster zu einem Off-Screen-Bitmap dargestellt werden

Inzwischen ist die ein Frontpuffer würde bleiben davon unberührt.

War es hilfreich?

Lösung

  

Ist das richtig?

Yup (das ist, wie die Thumbnails Sie Teile des Fensters zeigen können, die zur Zeit verdeckt werden).

DWM Die Wiedergabe des Bildschirms ist doppelt gepuffert. Allerdings, wenn es Ihre Puffer betewen Lösch- und Malerei packt ... es wird als ein sichtbares Artefakt zu zeigen. Sie müssen also noch Puffer verdoppeln. Die doppelte Pufferung erfolgt auf dem Desktop (d.h. er die nächste Desktopansicht vollständig zieht und dann kippt), nicht auf dem Off-Screen-Puffer, die jeweils Fenster gezogen werden.

Andere Tipps

Nun, Malerei auf eine Off-Screen-Bitmap ermöglicht nur die DWM Verbund die Fenster, wie es mag, ohne die Anwendung zu warten, neu zu ziehen (wie es der Fall in XP ist, wenn Sie Fenster über anderen zu bewegen, zum Beispiel) .

Dies gilt nicht bedeutet, dass auf diese Off-Screen-Oberfläche zeichnet automatisch reduziert Flimmern. Wenn Sie das Fenster löschen und dann neu zu zeichnen und zwischen den beiden Aktionen neu zeichnet die DWM den Bildschirm (was es tut etwa 60 mal pro Sekunde), dann natürlich sehen Sie flackern.

Es löst das „weiße Fenster“ Problem, wenn eine Anwendung nicht schnell genug neu zu zeichnen und es verringert auch durch überlappende Fenster neu zu zeichnen. Aber es hilft nicht gegen Flimmern. Die DWM hat keine Möglichkeit, zu wissen, dass Ihre Farbe Operation noch nicht abgeschlossen war und dass Sie das alte Bild des Fensters bis angezeigt haben wollen, nachdem Sie die Inhalte wieder gezogen haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top