Panoramica dell'architettura grafica di Windows
Windows offre diverse API C++/COM per la grafica. Queste API sono illustrate nel diagramma seguente.
- Graphics Device Interface (GDI) è l'interfaccia grafica originale per Windows. GDI è stato scritto per Windows a 16 bit e quindi aggiornato per Windows a 32 bit e a 64 bit.
- GDI+ è stato introdotto in Windows XP come successore di GDI. È possibile accedere alla libreria GDI+ tramite un set di classi C++ che esezionare funzioni C flat. .NET Framework fornisce anche una versione gestita di GDI+ nello spazio dei nomi System.Drawing .
- Direct3D supporta la grafica 3D.
- Direct2D è un'API moderna per la grafica 2D, il successore di GDI e GDI+.
- DirectWrite è un layout di testo e un motore di rasterizzazione. È possibile usare GDI o Direct2D per disegnare il testo rasterizzato.
- DirectX Graphics Infrastructure (DXGI) esegue attività di basso livello, ad esempio la presentazione di fotogrammi per l'output. La maggior parte delle applicazioni non usa direttamente DXGI. Piuttosto, funge da livello intermedio tra il driver grafico e Direct3D.
Direct2D e DirectWrite sono stati introdotti in Windows 7. Sono disponibili anche per Windows Vista e Windows Server 2008 tramite un aggiornamento della piattaforma. Per altre informazioni, vedere Platform Update per Windows Vista.
Direct2D è l'obiettivo di questo modulo. Sebbene sia GDI che GDI+ continuino a essere supportati in Windows, Direct2D e DirectWrite sono consigliati per i nuovi programmi. In alcuni casi, una combinazione di tecnologie potrebbe essere più pratica. Per queste situazioni, Direct2D e DirectWrite sono progettati per interagire con GDI.
Le sezioni successive descrivono alcuni dei vantaggi di Direct2D.
Accelerazione hardware
Il termine accelerazione hardware si riferisce ai calcoli grafici eseguiti dall'unità di elaborazione grafica (GPU), anziché dalla CPU. Le GPU moderne sono altamente ottimizzate per i tipi di calcolo usati nella grafica di rendering. In genere, più di questo lavoro viene spostato dalla CPU alla GPU, meglio.
Mentre GDI supporta l'accelerazione hardware per determinate operazioni, molte operazioni GDI sono associate alla CPU. Direct2D è sovrapposto a Direct3D e sfrutta appieno l'accelerazione hardware fornita dalla GPU. Se la GPU non supporta le funzionalità necessarie per Direct2D, Direct2D esegue il fallback al rendering software. In generale, Direct2D supera GDI e GDI+ nella maggior parte delle situazioni.
Trasparenza e anti-aliasing
Direct2D supporta la fusione alfa accelerata completamente hardware (trasparenza).
GDI ha un supporto limitato per la fusione alfa. La maggior parte delle funzioni GDI non supporta la fusione alfa, anche se GDI supporta la fusione alfa durante un'operazione bitblt. GDI+ supporta la trasparenza, ma la fusione alfa viene eseguita dalla CPU, quindi non trae vantaggio dall'accelerazione hardware.
La fusione alfa accelerata dall'hardware consente anche l'anti-aliasing. L'aliasing è un artefatto causato dal campionamento di una funzione continua. Ad esempio, quando una linea curva viene convertita in pixel, l'aliasing può causare un aspetto irregolare. Qualsiasi tecnica che riduce gli artefatti causati dall'aliasing viene considerata una forma di anti-aliasing. Nella grafica, l'anti-aliasing viene eseguita fondendo i bordi con lo sfondo. Ad esempio, ecco un cerchio disegnato da GDI e lo stesso cerchio disegnato da Direct2D.
L'immagine successiva mostra un dettaglio di ogni cerchio.
Il cerchio disegnato da GDI (a sinistra) è costituito da pixel neri che approssimano una curva. Il cerchio disegnato da Direct2D (a destra) usa la fusione per creare una curva più liscia.
GDI non supporta l'anti-aliasing quando disegna la geometria (linee e curve). GDI può disegnare testo anti-aliasing usando ClearType; ma in caso contrario, anche il testo GDI viene aliasato. L'aliasing è particolarmente evidente per il testo, perché le linee irregolari interrompono la progettazione del carattere, rendendo il testo meno leggibile. Anche se GDI+ supporta l'anti-aliasing, viene applicato dalla CPU, quindi le prestazioni non sono ottimali come Direct2D.
Grafica vettoriale
Direct2D supporta la grafica vettoriale. Nella grafica vettoriale, le formule matematiche vengono usate per rappresentare linee e curve. Queste formule non dipendono dalla risoluzione dello schermo, quindi possono essere ridimensionate in dimensioni arbitrarie. La grafica vettoriale è particolarmente utile quando è necessario ridimensionare un'immagine per supportare dimensioni del monitor o risoluzioni dello schermo diverse.
Prossima