Pergunta

É buffer duplo ainda necessária quando desktop Composição está habilitado?

O No Microsoft :

Graphical Device Interface (GDI)

Antes do Windows Vista e Windows Server 2008, um identificador de janela (HWND) foi pintado diretamente para a tela, que teve alguns benefícios, mas limitado como o Windows pode exibir e gerenciar janelas de nível superior. no Windows Vista e Windows Server 2008, todos janelas de nível superior são prestados a um off-screen bitmap (a semelhante WS_EX_LAYERED), e a janela do ecrã Manager combina as imagens em conjunto para desenhar o ambiente de trabalho.

Parece que toda a renderização agora é feito a um bitmap fora da tela:

janelas são prestados a um bitmap fora da tela

É este correto?

A razão que eu peço é porque eu ainda vejo piscando durante o ciclo de pintura padrão:

  • WM_ERASEBKGND
  • WM_PAINT

enquanto a composição área de trabalho está ativado:

text alt

i teria assumido que entre as chamadas para

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

que toda a pintura que aconteceria a um buffer de fundo:

janelas são prestados a um bitmap fora da tela

Enquanto isso, a um buffer frontal ficaria inalterado.

Foi útil?

Solução

É este correto?

Yup (que é como as miniaturas pode mostrar partes da janela que estão atualmente obscurecida).

renderização da tela do DWM é buffer duplo. No entanto, se ele pega seu buffer betewen apagar e pintar ... ele vai aparecer como um artefato visível. Então, você ainda precisa de buffer duplo. A memória intermédia dupla ocorre na área de trabalho (isto é, chama o próximo vista de computador completamente e, em seguida, vira), não nos buffers fora do écran que cada janela é desenhada para.

Outras dicas

Bem, pintando a um bitmap fora da tela apenas permite que o DWM para compor as janelas como ele gosta de sem ter que esperar para o aplicativo para redesenhar (como é o caso em XP quando você mover janelas em detrimento de outro, por exemplo) .

Este não significa que o desenho para que a superfície fora da tela automagicamente reduz a tremulação. Se apagar a janela e depois redesenhá-lo e entre ambas as ações do DWM redesenha a tela (o que faz cerca de 60 vezes por segundo), então é claro que você vai ver piscando.

Ele não resolve o problema "janelas brancas" quando um aplicativo não redesenhar rápido o suficiente e também reduz redesenho devido às janelas sobrepostas. Mas isso não ajuda contra a cintilação. O DWM tem nenhuma maneira de saber que a sua operação de pintura não estava completa ainda e que você deseja ter a velha imagem da janela apresentada até depois de ter tirado o conteúdo novamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top