Pregunta

Es de doble búfer todavía se requiere cuando se habilita la composición de escritorio?

Guía de compatibilidad de aplicaciones :

  

interfaz de dispositivo gráfico (GDI)

     

Antes de Windows Vista y Windows   Server 2008, un identificador de ventana (HWND)   fue pintado directamente a la pantalla,   los cuales tenía ciertas ventajas, pero   limitado cómo Windows podría mostrar y   gestionar las ventanas de nivel superior. en Windows   Vista y Windows Server 2008, todos   ventanas de nivel superior se prestan a una   fuera de la pantalla de mapa de bits (similar a   WS_EX_LAYERED), y la ventana de escritorio   Manager combina las imágenes juntas   para dibujar el escritorio.

Parece que toda la representación se hace ahora a un mapa de bits fuera de pantalla:

  

ventanas se representan en un mapa de bits fuera de pantalla

¿Es esto correcto?

La razón que pido es porque sigo viendo el parpadeo durante el ciclo de pintura estándar:

  • WM_ERASEBKGND
  • WM_PAINT

, mientras que la composición de escritorio está habilitado:

alt text

Me he asumido que entre las llamadas a

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

que toda la pintura que sucedería a un búfer de reserva:

  

ventanas se representan en un mapa de bits fuera de pantalla

Mientras tanto, el un búfer frontal se quedaría afectada.

¿Fue útil?

Solución

  

¿Es esto correcto?

Sí (que es como las miniaturas que pueden mostrar partes de la ventana que se oscureció la actualidad).

La representación de DWM de la pantalla es de doble búfer. Sin embargo, si se llama la memoria intermedia borrado betewen y la pintura ... va a aparecer como un artefacto visible. Por lo que aún necesitas búfer. El búfer doble se produce en el escritorio (es decir, que señala a la siguiente vista de escritorio completamente y luego voltea), no en las memorias intermedias de fuera de la pantalla que cada ventana se dibuja a.

Otros consejos

Bueno, la pintura de un mapa de bits fuera de la pantalla simplemente permite que el DWM a compuestos de las ventanas, ya que le gusta sin tener que esperar a que la aplicación para volver a dibujar (como es el caso en XP cuando se mueve ventanas sobre otro, por ejemplo) .

Esto hace no quiere decir que el dibujo a la superficie fuera de pantalla automagicamente reduce el parpadeo. Si borra la ventana y luego vuelve a dibujar y entre ambas acciones el DWM vuelve a dibujar la pantalla (lo que lo hace alrededor de 60 veces por segundo), entonces por supuesto que verá el parpadeo.

Se resuelve el problema "ventanas" cuando una aplicación no redibuja lo suficientemente rápido y también reduce redibujar debido a la superposición de ventanas. Pero no ayuda contra el parpadeo. El DWM no tiene manera de saber que su operación de pintura no se completa todavía y que desea tener la vieja imagen de la ventana que aparece hasta después de haber dibujado el contenido de nuevo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top