Panoramica dell'API Direct2D

Direct2D fornisce un'API, simile a Direct3D, per l'uso con C o C++. L'API espone un'ampia gamma di funzionalità correlate al disegno:

  • Destinazioni di rendering per la visualizzazione e il rendering fuori schermo tramite Direct2D, Direct3D o GDI.
  • Oggetti per la gestione dello stato di disegno, ad esempio trasformazioni dello spazio di coordinate e modalità antialiasing.
  • Rappresentazioni per i dati geometrici e le funzioni per l'elaborazione geometry.
  • Funzionalità di rendering per bitmap, geometrie e testo.
  • Esegue il provisioning per l'uso di contenuto grafico creato usando GDI o Direct3D.

In questo argomento viene fornita una panoramica degli oggetti che costituiscono l'API Direct2D. Contiene le sezioni seguenti:

File di intestazione Direct2D

L'API Direct2D è definita dai file di intestazione seguenti.

File di intestazione Descrizione
d2d1.h Definisce le versioni C e C++ dell'API Direct2D primaria.
d2d1helper.h Definisce le funzioni helper, le classi e le strutture di C++.
d2dbasetypes.h Definisce le primitive di disegno per Direct2D, ad esempio punti e rettangoli. Questa intestazione è inclusa in d2d1.h.
d2derr.h Definisce i codici di errore per Direct2D. Questa intestazione è inclusa in d2d1.h.
d2d1_1.h Definisce le versioni C e C++ dell'API Direct2D primaria per Windows 8 e versioni successive.
d2d1_1helper.h Definisce le funzioni helper, le classi e le strutture di C++ per Windows 8 e versioni successive.
d2d1effects.h Definisce le versioni C e C++ degli effetti immagine parte dell'API Direct2D per Windows 8 e versioni successive.
d2d1effecthelpers.h Definisce funzioni helper C++, classi e strutture degli effetti immagine parte dell'API Direct2D per Windows 8 e versioni successive.

 

Per usare Direct2D, l'applicazione deve includere il file di intestazione d2d1.h.

Per compilare un'applicazione Direct2D, aggiungere d2d1.lib all'elenco delle librerie. È possibile trovare d2d1.h e d2d1.lib in Windows Software Development Kit (SDK) per Windows 7.

Le sezioni seguenti descrivono alcune delle interfacce comuni fornite dall'API Direct2D.

Interfacce Direct2D

Nella radice dell'API Direct2D sono le interfacce ID2D1Factory e ID2D1Resource. Un oggetto ID2D1Factory crea oggetti ID2D1Resource e funge da punto di partenza per l'uso di Direct2D. Tutti gli altri oggetti Direct2D ereditano dall'interfaccia ID2D1Resource . Esistono due tipi di risorse Direct2D: risorse indipendenti dal dispositivo e risorse dipendenti dal dispositivo.

  • Le risorse indipendenti dal dispositivo non sono associate a un determinato dispositivo di rendering e possono essere mantenute per la vita di un'applicazione.
  • Le risorse dipendenti dal dispositivo sono associate a un determinato dispositivo di rendering e terminano la funzione se tale dispositivo viene rimosso.

Per altre informazioni sulle risorse e sulla condivisione delle risorse, vedere Panoramica delle risorse.

Interfaccia ID2D1Factory

L'interfaccia ID2D1Factory è il punto di partenza per l'uso di Direct2D. Si usa un ID2D1Factory per creare un'istanza di risorse Direct2D. Per creare un ID2D1Factory, usare uno dei metodi CreateFactory .

Una factory definisce un set di metodi CreateResource che possono produrre le risorse di disegno seguenti:

  • Le destinazioni di rendering sono oggetti che eseguono il rendering dei comandi di disegno.
  • I blocchi di stato di disegno sono oggetti che archiviano informazioni sullo stato di disegno, ad esempio la trasformazione corrente e la modalità antialiasing.
  • Le geometrie sono oggetti che rappresentano forme semplici e potenzialmente complesse.

Uno degli oggetti più utili che una factory può creare è l'ID2D1RenderTarget, descritto nella sezione seguente.

Destinazioni di rendering

Una destinazione di rendering è una risorsa che eredita dall'interfaccia ID2D1RenderTarget . Una destinazione di rendering crea risorse per il disegno ed esegue operazioni di disegno. Esistono diversi tipi di destinazioni di rendering che possono essere usate per eseguire il rendering della grafica nei modi seguenti:

  • GLI oggetti ID2D1HwndRenderTarget eseguono il rendering del contenuto in una finestra.
  • Gli oggetti ID2D1DCRenderTarget vengono sottoposti a rendering in un contesto di dispositivo GDI.
  • Gli oggetti di destinazione di rendering bitmap eseguono il rendering del contenuto in una bitmap fuori schermo.
  • DXGI esegue il rendering degli oggetti di destinazione in una superficie DXGI da usare con Direct3D.

Poiché una destinazione di rendering è associata a un dispositivo di rendering specifico, è una risorsa dipendente dal dispositivo e smette di funzionare se il dispositivo viene rimosso.

Funzionalità di destinazione di rendering

È possibile specificare se una destinazione di rendering deve usare l'accelerazione hardware e se il rendering della visualizzazione remota deve essere eseguito dal computer locale o remoto. Le destinazioni di rendering possono essere configurate per il rendering aliased o antialiased. Per il rendering di scene con un numero elevato di primitive, uno sviluppatore può anche eseguire il rendering di grafica 2D in modalità aliased e usare antisasing multisample D3D per ottenere una maggiore scalabilità.

Le destinazioni di rendering possono anche raggruppare le operazioni di disegno in livelli rappresentati dall'interfaccia ID2D1Layer . I livelli sono utili per raccogliere operazioni di disegno da comporre insieme durante il rendering di un frame. Per alcuni scenari, questo può essere un'alternativa utile al rendering a una destinazione di rendering bitmap e quindi riutilizzare il contenuto della bitmap, poiché i costi di allocazione per il layering sono inferiori a per un ID2D1BitmapRenderTarget.

Le destinazioni di rendering possono creare nuove destinazioni di rendering compatibili con se stessi, utili per il rendering intermedio dello schermo, mantenendo le varie proprietà di destinazione di rendering impostate sull'originale.

È anche possibile eseguire il rendering usando GDI in una destinazione di rendering Direct2D chiamando QueryInterface in una destinazione di rendering per ID2D1GdiInteropRenderTarget, che dispone di metodi GetDC e ReleaseDC su di esso che possono essere usati per recuperare un contesto di dispositivo GDI. Il rendering tramite GDI è possibile solo se la destinazione di rendering è stata creata con il flag di D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE impostato. Ciò è utile per le applicazioni che eseguono principalmente il rendering con Direct2D, ma hanno un modello di estendibilità o altri contenuti legacy che richiedono la possibilità di eseguire il rendering con GDI. Per altre informazioni, vedere Panoramica dell'interoperabilità direct2D e GDI.

Eseguire il rendering delle risorse di destinazione

Come una factory, una destinazione di rendering può creare risorse di disegno. Tutte le risorse create da una destinazione di rendering sono risorse dipendenti dal dispositivo (proprio come la destinazione di rendering). Una destinazione di rendering può creare i tipi di risorse seguenti:

  • Bitmap
  • Pennelli
  • Livelli
  • Mesh

Comandi di disegno

Per eseguire il rendering del contenuto, usare i metodi di disegno di destinazione di rendering. Prima di iniziare il disegno, si chiama il metodo ID2D1RenderTarget::BeginDraw . Al termine del disegno, si chiama il metodo ID2D1RenderTarget::EndDraw . Tra queste chiamate si usano metodi Draw e Fill per eseguire il rendering delle risorse di disegno. La maggior parte dei metodi Draw e Fill accetta una forma (una primitiva o una geometria) e un pennello per riempire o definire la forma.

Le destinazioni di rendering forniscono anche metodi di ritaglio, applicazione di maschere di opacità e trasformazione dello spazio delle coordinate.

Direct2D usa un sistema di coordinate a sinistra: i valori positivi dell'asse x vengono distribuiti verso destra e i valori positivi dell'asse y vengono distribuiti verso il basso.

Gestione degli errori

I comandi di disegno di destinazione di rendering non indicano se l'operazione richiesta ha avuto esito positivo. Per scoprire se sono presenti errori di disegno, chiamare il metodo Flush di destinazione di rendering o EndDraw per ottenere un hresult.

Risorse di disegno

Le sezioni seguenti descrivono alcune delle risorse che possono essere create dalle interfacce di destinazione e factory di rendering.

Pennelli

Un pennello, rappresentato dall'interfaccia ID2D1Brush , è una risorsa dipendente dal dispositivo, creata da una destinazione di rendering, che disegna un'area con il relativo output. Pennelli diversi hanno diversi tipi di output. Alcuni pennelli dipingono un'area con un colore a tinta unita, altri con una sfumatura o un'immagine. Direct2D offre quattro tipi di pennelli:

Per creare un pennello, usare uno dei metodi ID2D1RenderTarget::Create*Type>*<Brush, ad esempio CreateRadialGradientBrush. I pennelli possono essere usati con metodi Disegnare e Riempimento di destinazione di rendering, per disegnare un tratto o una struttura di forma o come maschera di opacità.

Per altre informazioni sui pennelli, vedere Panoramica dei pennelli.

Geometrie

Oltre alle primitive di disegno di base, ad esempio punti, rettangoli e puntini di sospensione, Direct2D fornisce l'interfaccia ID2D1Geometry per descrivere forme semplici e complesse. Le interfacce che ereditano da ID2D1Geometry definiscono diversi tipi di forme, ad esempio ID2D1RectangleGeometry per rappresentare rettangoli, ID2D1RoundedRectangleGeometry per rappresentare rettangoli arrotondati e ID2D1EllipseGeometry per rappresentare i puntini di sospensione.

È possibile creare forme più complesse usando l'interfaccia ID2D1GeometrySink per specificare una serie di figure composte da linee, curve e archi. L'ID2D1GeometrySink viene passato al metodo Open di un ID2D1PathGeometry per generare una geometria complessa. ID2D1SimplifiedGeometrySink può essere usato anche con l'API DirectWrite per estrarre i contorni del percorso del testo formattato per il rendering artistico.

Le interfacce geometry forniscono metodi per modificare le forme ampliando o semplificando le geometrie esistenti oppure generando l'intersezione o l'unione di più geometrie. Forniscono inoltre metodi per determinare se le geometrie si intersecano o si sovrappongono, recuperando informazioni sui limiti, calcolando l'area o la lunghezza di una geometria e interpolando le posizioni lungo una geometria. Direct2D offre anche la possibilità di creare una mesh di triangoli che viene tessellata da una geometria.

Per creare una geometria, usare uno dei metodi ID2D1Factory::Create*Type>*<Geometry, ad esempio CreatePathGeometry. Una geometria è una risorsa indipendente dal dispositivo.

Per eseguire il rendering di una geometria, usare i metodi DrawGeometry e FillGeometry di una destinazione di rendering.

Per altre informazioni sulle geometrie, vedere Panoramica delle geometrie.

Bitmap

Direct2D non fornisce metodi per il caricamento o l'archiviazione di bitmap; invece consente di creare bitmap usando windows Imaging Component (WIC) . Le risorse bitmap possono essere caricate usando WIC e quindi usate per creare un ID2D1Bitmap tramite il metodo ID2D1RenderTarget::CreateBitmapFromWicBitmap .

È anche possibile creare bitmap da dati in memoria configurati tramite altri mezzi. Dopo aver creato una bitmap, può essere disegnato dal metodo DrawBitmap di destinazione di rendering o con un pennello bitmap.

Poiché la creazione di risorse bitmap nelle destinazioni di rendering hardware è spesso un'operazione costosa, Direct2D può aggiornare il contenuto di una bitmap (o parte della bitmap) usando i metodi CopyFromBitmap, CopyFromRenderTarget e CopyFromMemory . L'uso di questi metodi può potenzialmente risparmiare i costi associati ad allocazioni di trame GPU aggiuntive.

Disegno testo

Direct2D è stato progettato per usare le operazioni di testo della nuova API di testo, DirectWrite. Per semplificare l'uso dell'API DirectWrite, le destinazioni di rendering forniscono tre metodi per il rendering di risorse di testo DirectWrite: DrawText, DrawTextLayout e DrawGlyphRun. Poiché Direct2D usa la GPU per il processo di rendering del testo ClearType, Direct2D offre un utilizzo della CPU inferiore rispetto a GDI per le operazioni di testo e una migliore scalabilità perché è disponibile una maggiore potenza di elaborazione GPU.

L'ID2D1RenderTarget::D rawText è progettato per gli scenari più semplici che coinvolgono il rendering di una stringa di testo Unicode con formattazione minima. La flessibilità di layout e tipografica più complessa viene fornita tramite il metodo ID2D1RenderTarget::D rawTextLayout , che usa un oggetto IDWriteTextLayout per specificare il contenuto e la formattazione da eseguire. IDWriteTextLayout consente di specificare la formattazione singola per le sottostringa di testo e altre opzioni di tipografia avanzate.

Per gli scenari in cui è necessario un controllo preciso del layout a livello di glifo, è possibile usare il metodo ID2D1RenderTarget::D rawGlyphRun insieme alle strutture di misurazione fornite da DirectWrite.

Per usare l'API DirectWrite, includere l'intestazione dwrite.h. Come Direct2D, DirectWrite usa una factory, IDWriteFactory per creare oggetti di testo. Usare la funzione DWriteCreateFactory per creare una factory e quindi usare i metodi Create per creare DirectWrite risorse, ad esempio IDWriteTextFormat.

Per altre informazioni sulle DirectWrite, vedere l'argomento Introduzione DirectWrite.

Primitive Direct2D

Direct2D definisce un set di primitive simili a quelle fornite da altre API di disegno. Fornisce una struttura di colori, una struttura matrice per l'esecuzione di trasformazioni e versioni intere a virgola mobile di punti, rettangoli, puntini di sospensione e strutture di dimensioni. In genere, si usano le versioni a virgola mobile di queste strutture.

Non si usa una factory o una destinazione di rendering per creare un'istanza di primitive Direct2D. È possibile crearli direttamente oppure usare i metodi helper definiti in d2d1helper.h per crearli.

Riferimento a Direct2D

DirectWrite HelloWorld

Introduzione DirectWrite

Panoramica delle risorse

Windows Imaging Component (WIC)