Question

est une double mémoire tampon toujours nécessaire lorsque la composition de bureau est activé?

Dans Microsoft application Guide de compatibilité :

  

Graphical Device Interface (GDI)

     

Avant Windows Vista et Windows   Server 2008, une poignée de fenêtre (HWND)   a été peint directement à l'écran,   qui avait certains avantages, mais   limitée comment Windows pourrait afficher et   gérer les fenêtres de haut niveau. Sous Windows   Vista et Windows Server 2008, tous les   fenêtres de niveau supérieur sont rendus à un   bitmap hors écran (similaire à   WS_EX_LAYERED), et le bureau Fenêtre   Gestionnaire combine les images ensemble   pour dessiner le bureau.

On dirait que tout est à présent effectuée à une bitmap hors écran:

  

fenêtres sont rendus à une bitmap hors écran

Est-ce correct?

La raison pour laquelle je demande est parce que je vois encore vacillante au cours du cycle de peinture standard:

  • WM_ERASEBKGND
  • WM_PAINT

alors que la composition du bureau est activé:

j'aurais supposé que entre les appels à

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

que toute la peinture se passerait-il à un tampon de retour:

  

fenêtres sont rendus à une bitmap hors écran

En attendant le tampon avant resterait inchangée.

Était-ce utile?

La solution

  

Est-ce correct?

Eh oui (ce qui est la façon dont les vignettes peuvent vous montrer des parties de la fenêtre qui sont occultés).

Le rendu de DWM de l'écran est à double tampon. Cependant, si elle saisit votre effacement betewen tampon et peinture ... il va apparaître comme un artefact visible. Donc, vous avez encore besoin de tampon double. La double mise en mémoire tampon se produit sur le bureau (par exemple, il tire la prochaine vue du bureau complètement, puis se retourne), et non pas sur les mémoires tampon hors-écran que chaque fenêtre est attirée sur.

Autres conseils

Eh bien, la peinture à un bitmap hors écran permet juste le DWM aux fenêtres composites comme il aime sans avoir à attendre que l'application de redessiner (comme cela est le cas dans XP lorsque vous déplacez les fenêtres sur une autre, par exemple) .

Cela ne pas signifie que le dessin à cette surface hors écran réduit vacillante automagiquement. Si vous supprimez la fenêtre, puis redessiner et entre les deux actions DWM redessine l'écran (ce qui fait environ 60 fois par seconde), puis bien sûr, vous verrez vacillante.

Il ne résout le problème « windows blanc » lorsqu'une application ne redessine pas assez vite et il réduit également redessiner en raison de fenêtres qui se chevauchent. Mais il ne permet pas contre vacillante. Le DWM n'a aucun moyen de savoir que votre opération de peinture n'a pas été encore terminée et que vous souhaitez avoir l'ancienne image de la fenêtre affichée qu'après avoir dessiné le contenu à nouveau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top