2010-05-20 4 views
8

Je me prépare à faire une application de dessin sous Windows. Je me demandais juste, les programmes de dessin ont-ils un bitmap de mémoire qu'ils verrouillent, puis définissent chaque pixel, puis blit?Comment Photoshop (ou les programmes de dessin) blit-il?

Je ne comprends pas comment Photoshop peut déplacer des couches entières sans décalage ou scintillement sans utiliser l'accélération matérielle. Aussi dans un programme comme Expression Design, je pourrais avoir 200 formes et les déplacer tout à la fois sans retard. Je me demande vraiment comment cela peut se faire sans l'aide du GPU.

En outre, je ne pense pas que des algorithmes super efficaces pourraient justifier cela?

Répondre

1

Regardez cette question:

Reduce flicker with GDI+ and C++

Tout ce que vous pouvez faire le dessin DC sans GPU est de réduire le scintillement. Tout dépend de la vitesse de remplissage de votre bitmap de mémoire. Et ici, vous pouvez utiliser des algorithmes efficaces, le multithreading et tout ce dont vous avez besoin.

+0

Ok, donc à la fin de la journée, c'est la vitesse que je peux remplir la mémoire bitmap, je pense que ce que je vais faire pour obtenir une opacité facile est d'utiliser OpenGL et de dessiner des textures en quads. merci – jmasterx

1

Certainement moderne Photoshop uses GPU acceleration si disponible. Un autre outil possible est DMA. Vous pouvez également trouver utile de lire le code source des programmes existants comme GIMP.

+0

Mais ma question était vraiment comment il peut le faire sans parce qu'il n'a pas l'habitude de l'avoir. – jmasterx

+0

DMA n'est pas un autre outil. Il aide le GPU à transférer des données sans utiliser de CPU. –

+0

@Kirill, ce n'est pas vrai. DMA peut être utilisé sans GPU, et le CPU peut l'initier. –

1

La double mise en mémoire tampon (ou plus) est la même que dans les jeux, où nous attirons une tonne de conneries dans un tampon «arrière» pendant que le tampon «avant» est affiché. Ensuite, lorsque le tirage est terminé, les tampons sont échangés (un échange de pointeur, pas des copies!) Et le processus se poursuit dans les nouveaux tampons avant et arrière.

La triple mise en mémoire tampon offre un autre avantage, en ce sens que vous pouvez commencer à dessiner deux images à partir de la prochaine image, mais sans forcer un échange de tampon au milieu de l'actualisation de l'écran. De nombreux jeux font l'échange de tampon au milieu de l'actualisation, mais vous pouvez parfois le voir comme des artefacts visibles (déchirant) sur l'écran.

Quoi qu'il en soit - pour une application dessinant des bitmaps dans une fenêtre, si vous avez une opération "lente", faites-le dans un tampon non affiché en présentant la version affichée à l'API de rendu, par ex. GDI. Laissez le logiciel système gérer toutes les mises à jour de fantaisie.

+0

Merci, je suis déjà en double buffering, c'est une technique très utile! – jmasterx