Condividi tramite


Panoramica dell'API Direct2D

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

  • Destinazioni di rendering per l'output su schermo e fuori schermo tramite Direct2D, Direct3D o GDI.
  • Oggetti per la gestione dello stato di disegno, ad esempio trasformazioni dello spazio delle coordinate e modalità di anti-aliasing.
  • Rappresentazioni per dati geometrici e funzioni per l'elaborazione della geometria.
  • Funzionalità di rendering per bitmap, geometrie e testo.
  • Disposizioni per l'utilizzo del contenuto grafico creato con GDI o Direct3D.

Questo argomento offre una panoramica degli oggetti che costituiscono l'API Direct2D. Contiene le sezioni seguenti:

I file di intestazione di 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 funzioni helper, classi e strutture 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 nel file 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 funzioni helper, classi e strutture 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 le funzioni di supporto, le classi e le strutture C++ degli effetti immagine della 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 di 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 interfacceID2D1Factorye 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 dispositivo di rendering specifico e possono essere mantenute per la vita di un'applicazione.
  • Le risorse dipendenti dal dispositivo sono associate a un particolare dispositivo di rendering e cessano di funzionare se il dispositivo viene rimosso.

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

Interfaccia ID2D1Factory

L'interfacciaID2D1Factoryè il punto di partenza per l'uso di Direct2D. Usi un ID2D1Factory per creare un'istanza delle risorse Direct2D. Per creare un oggetto ID2D1Factory, utilizzare 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 rendono i comandi di disegno.
  • I blocchi di stato del disegno sono oggetti che archiviano informazioni sullo stato del disegno, ad esempio la trasformazione corrente e la modalità anti-aliasing.
  • Le geometrie sono oggetti che rappresentano forme semplici e potenzialmente complesse.

Uno degli oggetti più utili che una factory può creare è il 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:

  • ID2D1HwndRenderTarget oggetti renderizzano contenuti in una finestra.
  • ID2D1DCRenderTarget oggetti di cui viene eseguito il rendering in un contesto di dispositivo GDI.
  • Gli oggetti di destinazione di rendering bitmap eseguono il rendering del contenuto in una bitmap fuori schermo.
  • Gli oggetti di destinazione di rendering DXGI vengono resi su una superficie DXGI per l'uso con Direct3D.

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

Funzionalità del Target di Rendering

È possibile specificare se una destinazione di rendering deve usare l'accelerazione hardware e se il rendering dello schermo remoto deve essere eseguito dal computer locale o remoto. I target di rendering possono essere configurati per il rendering aliasato o anti-alias. Per il rendering di scene con un numero elevato di primitive, uno sviluppatore può anche eseguire il rendering di grafica 2D in modalità con alias e usare l'anti-aliasing D3D per ottenere una maggiore scalabilità.

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

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

È anche possibile eseguire il rendering utilizzando GDI su una destinazione di rendering Direct2D chiamando QueryInterface su una destinazione di rendering per ID2D1GdiInteropRenderTarget, che include i metodi GetDC e ReleaseDC utilizzabili per recuperare un contesto di dispositivo GDI. Il rendering tramite GDI è possibile solo se la destinazione di rendering è stata creata con il flag 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 fabbrica, una destinazione di rendering può creare risorse grafiche. 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
  • Spazzole
  • Strati
  • Reti

Comandi per il disegno

Per eseguire il rendering del contenuto, si utilizzano i metodi di disegno del target di rendering. Prima di iniziare a disegnare, chiamare il metodo ID2D1RenderTarget::BeginDraw. Al termine del disegno, chiamare il metodo ID2D1RenderTarget::EndDraw. Tra queste chiamate si usano i 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 delineare la forma.

I target di rendering forniscono anche metodi per ritagliare, applicare maschere di opacità e trasformare lo spazio delle coordinate.

Direct2D usa un sistema di coordinate sinistrorso: i valori positivi dell'asse x passano verso destra e i valori positivi dell'asse y procedono verso il basso.

Gestione degli errori

I comandi di rendering target non indicano se l'operazione richiesta è stata completata con successo. Per verificare se si sono verificati errori di disegno, chiamare il metodo destinazione di rendering Flush o il metodo EndDraw per ottenere un HRESULT.

Risorse di disegno

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

Spazzole

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. I pennelli diversi hanno tipi diversi di output. Alcuni pennelli disegnano un'area con un colore a tinta unita, altre con una sfumatura o un'immagine. Direct2D offre quattro tipi di pennelli:

Per creare un pennello, si usa uno dei metodi ID2D1RenderTarget::Create*<Type>*Brush, ad esempio CreateRadialGradientBrush. I pennelli possono essere utilizzati con i metodi Draw e Fill di un target di rendering, per disegnare il contorno di una forma o come maschera di opacità.

Per altre informazioni sui pennelli, vedere cenni preliminari sui pennelli .

Geometrie

Oltre alle primitive di disegno di base, come punti, rettangoli ed ellissi, 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 ID2D1GeometrySinksink per specificare una serie di figure composte da linee, curve e archi. Il 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 di 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 tassellata a partire da una geometria.

Per creare una geometria, si usa uno dei metodi ID2D1Factory::Create*<Type>*Geometry, come 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 cenni preliminari sulle geometrie .

Bitmap

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

Le bitmap possono anche essere create da dati in memoria configurati tramite altri mezzi. Dopo aver creato una bitmap, è possibile disegnarla dal target di rendering con il metodo DrawBitmap 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 il CopyFromBitmap, CopyFromRenderTargete metodi copyFromMemory. L'uso di questi metodi può potenzialmente ridurre i costi associati ad allocazioni di trame GPU aggiuntive.

Testo di disegno

Direct2D è stato progettato per lavorare con 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 delle risorse di testo DirectWrite: DrawText, DrawTextLayoute 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à, poiché è disponibile una maggiore potenza di elaborazione GPU.

Il ID2D1RenderTarget::DrawText è progettato per gli scenari più semplici che prevedono il rendering di una stringa di testo Unicode con formattazione minima. Il layout più complesso e la flessibilità tipografica vengono offerti tramite il metodo ID2D1RenderTarget::DrawTextLayout, che usa un oggetto IDWriteTextLayout per specificare il contenuto e la formattazione da renderizzare. IDWriteTextLayout consente di specificare la formattazione individuale per le sottostringhe 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::DrawGlyphRun insieme alle funzionalità 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 funzioneDWriteCreateFactoryper creare una factory e quindi usare i metodi Create per creare risorse DirectWrite, ad esempio IDWriteTextFormat.

Per altre informazioni su DirectWrite, vedere l'argomento Introduzione a DirectWrite.

Primitive di 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 a virgola mobile e intere di punti, rettangoli, ellissi e strutture di dimensioni. Di solito, si utilizzano le versioni a virgola mobile di queste strutture.

Non si utilizza una factory o un render target per istanziare primitive Direct2D. È possibile crearli direttamente oppure usare i metodi helper definiti in d2d1helper.h per crearli.

Riferimento Direct2D

DirectWrite HelloWorld

Presentazione di DirectWrite

Panoramica delle risorse

wic (Windows Imaging Component)