É buffer duplo necessário com o Desktop Composição habilitado?
-
12-09-2019 - |
Pergunta
É buffer duplo ainda necessária quando desktop Composição está habilitado?
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:
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.
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.