2010-05-20 26 views
8

Me estoy preparando para hacer una aplicación de dibujo en Windows. Solo me pregunto, ¿los programas de dibujo tienen un mapa de bits de memoria que bloquean, luego configuran cada píxel, y luego se apagan?¿Cómo funciona Photoshop (o programas de dibujo)?

No entiendo cómo Photoshop puede mover capas enteras sin lag o parpadeo sin usar la aceleración de hardware. También en un programa como Expression Design, podía tener 200 formas y moverlas de una vez sin retraso. Realmente me pregunto cómo se puede hacer esto sin la ayuda de la GPU.

Además, no creo que los algoritmos super eficientes podrían justificar eso?

Respuesta

1

mirada a esta pregunta:

Reduce flicker with GDI+ and C++

Todo lo que puede hacer sobre el dibujo de CC sin GPU es reducir el parpadeo. Cualquier otra cosa depende de la velocidad de llenado de su mapa de bits de memoria. Y aquí puedes usar algoritmos eficientes, multihilo y todo lo que necesites.

+0

Ok, así que al final del día es la velocidad con la que puedo llenar el mapa de bits de la memoria, creo que lo que haré para obtener una opacidad más fácil es usar OpenGL y simplemente dibujar texturas en quads. gracias – jmasterx

1

Seguro Photoshop moderno uses GPU acceleration si está disponible. Otra posible herramienta es DMA. También puede ser útil leer el código fuente de programas existentes como GIMP.

+0

Pero mi pregunta realmente fue cómo puede hacerlo sin porque no solía tenerlo. – jmasterx

+0

DMA no es una herramienta más. Ayuda a la GPU a transferir datos sin usar la CPU. –

+0

@Kirill, eso no es verdad. DMA se puede usar sin una GPU, y la CPU puede iniciarlo. –

1

Doble (o más) almacenamiento en búfer es la forma en que se hace en los juegos, donde estamos sacando un montón de basura en un búfer "atrás" mientras se muestra el búfer "frontal". Luego, cuando termina el sorteo, los buffers se intercambian (¡un intercambio de puntero, no copias!) Y el proceso continúa en los nuevos buffers frontal y posterior.

El triple almacenamiento en búfer ofrece otra ventaja, ya que puede comenzar a dibujar dos cuadros a partir del siguiente cuadro, pero sin forzar un intercambio de memoria intermedia en el medio de la actualización de pantalla. Muchos juegos hacen el intercambio de búfer en el medio de la actualización, pero a veces se puede ver como artefactos visibles (rasgado) en la pantalla.

De todas formas, para una aplicación que dibuje mapas de bits en una ventana, si tiene alguna operación "lenta", hágalo en un búfer no mostrado mientras presenta la versión mostrada a la API de procesamiento, p. GDI. Deje que el software del sistema maneje todas las actualizaciones sofisticadas.

+0

Gracias ya estoy doble buffering, es una técnica muy útil! – jmasterx

Cuestiones relacionadas