2010-05-20 13 views
8

Mi sto preparando a creare un'applicazione di disegno in Windows. Mi stavo solo chiedendo, i programmi di disegno hanno una bitmap di memoria che bloccano, quindi impostano ciascun pixel, quindi blitano?Come bliterare Photoshop (o programmi di disegno)?

Non capisco come Photoshop può muovere interi livelli senza lag o sfarfallio senza utilizzare l'accelerazione hardware. Inoltre, in un programma come Expression Design, potrei avere 200 forme e spostarle tutte in una volta senza ritardo. Mi sto davvero chiedendo come questo può essere fatto senza l'aiuto della GPU.

Inoltre, non credo che super-algoritmi efficienti possono giustificare questo?

risposta

1

Guardate questa domanda:

Reduce flicker with GDI+ and C++

Tutto quello che puoi fare su disegno CC senza GPU è quello di ridurre lo sfarfallio. Qualsiasi altra cosa dipende dalla velocità di riempimento della bitmap di memoria. E qui puoi usare algoritmi efficienti, multithreading e tutto ciò di cui hai bisogno.

+0

Ok, quindi alla fine della giornata è la velocità che posso riempire la bitmap della memoria, penso che quello che farò per ottenere una facile opacità è usare OpenGL e disegnare trame su quad. grazie – jmasterx

1

Certamente moderna Photoshop uses GPU acceleration se disponibile. Un altro possibile strumento è DMA. Potrebbe anche essere utile leggere il codice sorgente dei programmi esistenti come GIMP.

+0

Ma la mia domanda era veramente come si può farlo senza perché non ha usato per averlo. – jmasterx

+0

DMA non è un altro strumento. Aiuta GPU a trasferire i dati senza utilizzare la CPU. –

+0

@Kirill, non è vero. DMA può essere utilizzato senza una GPU e la CPU può avviarlo. –

1

doppia (o più) di buffering è il modo in cui è fatto nei giochi, dove stiamo disegnando una tonnellata di merda in un buffer "indietro" mentre è visualizzato il buffer di "fronte". Poi, quando l'estrazione è terminata, i buffer vengono scambiati (uno scambio di puntatori, non copie!) E il processo continua nei nuovi buffer fronte e retro.

Il buffering triplo offre un altro vantaggio, in quanto è possibile iniziare a disegnare due fotogrammi-da-ora quando il fotogramma successivo è terminato, ma senza forzare uno swap del buffer nel mezzo della schermata di aggiornamento. Molti giochi eseguono il buffer swap nel mezzo dell'aggiornamento, ma a volte è possibile vederlo come artefatti visibili (strappi) sullo schermo.

In ogni caso, per un'applicazione che esegue il disegno di bitmap in una finestra, se si dispone di un'operazione "lenta", inserirla in un buffer non visualizzato mentre si presenta la versione visualizzata all'API di rendering, ad es. GDI. Lascia che il software di sistema gestisca tutti gli aggiornamenti fantasiosi.

+0

Grazie già al doppio buffering, è una tecnica molto utile! – jmasterx

Problemi correlati