Freigeben über


Übersicht über die Direct2D-API

Direct2D stellt eine API bereit, ähnlich wie Direct3D, für die Verwendung mit C oder C++. Die API macht eine Vielzahl von zeichnungsbezogenen Funktionen verfügbar:

  • Renderziele für das Anzeigen- und Offscreen-Rendering mit Direct2D, Direct3D oder GDI.
  • Objekte zum Verwalten des Zeichnungszustands wie Koordinatenraumtransformationen und Antialiasingmodi.
  • Darstellungen für geometrische Daten und Funktionen für die Geometrieverarbeitung.
  • Renderfunktionen für Bitmaps, Geometrien und Text.
  • Bestimmungen für die Verwendung grafischer Inhalte, die mit GDI oder Direct3D erstellt wurden.

Dieses Thema enthält eine Übersicht über die Objekte, aus denen die Direct2D-API besteht. Er enthält die folgenden Abschnitte:

Direct2D-Headerdateien

Die Direct2D-API wird durch die folgenden Headerdateien definiert.

Header-Datei Description
d2d1.h Definiert C- und C++-Versionen der primären Direct2D-API.
d2d1helper.h Definiert C++-Hilfsfunktionen, -klassen und -Strukturen.
d2dbasetypes.h Definiert Zeichnungsgrundtypen für Direct2D, z. B. Punkte und Rechtecke. Dieser Header ist in d2d1.h enthalten.
d2derr.h Definiert die Fehlercodes für Direct2D. Dieser Header ist in d2d1.h enthalten.
d2d1_1.h Definiert C- und C++-Versionen der primären Direct2D-API für Windows 8 und höher.
d2d1_1helper.h Definiert C++-Hilfsfunktionen, -klassen und -Strukturen für Windows 8 und höher.
d2d1effects.h Definiert C- und C++-Versionen des Bildeffekteteils der Direct2D-API für Windows 8 und höher.
d2d1effecthelpers.h Definiert C++-Hilfsfunktionen, Klassen und Strukturen des Bildeffekteteils der Direct2D-API für Windows 8 und höher.

 

Um Direct2D zu verwenden, sollte Ihre Anwendung die d2d1.h-Headerdatei enthalten.

Um eine Direct2D-Anwendung zu kompilieren, fügen Sie der Liste der Bibliotheken d2d1.lib hinzu. Sie finden d2d1.h und d2d1.lib in Windows Software Development Kit (SDK) für Windows 7.

In den folgenden Abschnitten werden einige der allgemeinen Schnittstellen beschrieben, die von der Direct2D-API bereitgestellt werden.

Direct2D-Schnittstellen

An der Wurzel der Direct2D-API stehen die Schnittstellen ID2D1Factory und ID2D1Resource. Ein ID2D1Factory-Objekt erstellt ID2D1Resource-Objekte und dient als Ausgangspunkt für die Verwendung von Direct2D. Alle anderen Direct2D-Objekte erben von der ID2D1Resource-Schnittstelle . Es gibt zwei Arten von Direct2D-Ressourcen: geräteunabhängige Ressourcen und geräteabhängige Ressourcen.

  • Geräteunabhängige Ressourcen sind keinem bestimmten Renderinggerät zugeordnet und können für die Lebensdauer einer Anwendung beibehalten werden.
  • Geräteabhängige Ressourcen sind einem bestimmten Renderinggerät zugeordnet und funktionieren nicht mehr, wenn dieses Gerät entfernt wird.

(Weitere Informationen zur Ressourcen- und Ressourcenfreigabe finden Sie in der Ressourcenübersicht.)

Die ID2D1Factory-Schnittstelle

Die ID2D1Factory-Schnittstelle ist der Ausgangspunkt für die Verwendung von Direct2D. Sie verwenden eine ID2D1Factory zum Instanziieren von Direct2D-Ressourcen. Zum Erstellen einer ID2D1Factory verwenden Sie eine der CreateFactory-Methoden .

Eine Factory definiert einen Satz von Create* -Methoden (wobei * ein Platzhalter für einen Ressourcennamen ist), der die folgenden Zeichnungsressourcen erzeugen kann:

  • Renderziele sind Objekte, die Zeichnungsbefehle rendern.
  • Zeichnungszustandsblöcke sind Objekte, die Zeichnungszustandsinformationen speichern, z. B. die aktuelle Transformation und den Antialiasingmodus.
  • Geometrien sind Objekte, die einfache und potenziell komplexe Formen darstellen.

Eines der nützlichsten Objekte, die eine Factory erstellen kann, ist das ID2D1RenderTarget, das im folgenden Abschnitt beschrieben wird.

Renderziele

Ein Renderziel ist eine Ressource, die von der ID2D1RenderTarget-Schnittstelle erbt. Ein Renderziel erstellt Ressourcen für das Zeichnen und führt Zeichnungsvorgänge aus. Es gibt verschiedene Arten von Renderzielen, die zum Rendern von Grafiken auf folgende Weise verwendet werden können:

  • ID2D1HwndRenderTarget-Objekte rendern Inhalt in einem Fenster.
  • ID2D1DCRenderTarget-Objekte werden in einem GDI-Gerätekontext gerendert.
  • Bitmap-Renderzielobjekte rendern Inhalt in einer Offscreen-Bitmap.
  • DXGI-Renderzielobjekte rendern auf eine DXGI-Oberfläche zur Verwendung mit Direct3D.

Da ein Renderziel einem bestimmten Renderinggerät zugeordnet ist, handelt es sich um eine geräteabhängige Ressource und funktioniert nicht mehr, wenn das Gerät entfernt wird.

Render-Ziel-Merkmale

Sie können angeben, ob ein Renderziel Hardwarebeschleunigung verwenden soll und ob die Remoteanzeige vom lokalen oder Remotecomputer gerendert werden soll. Renderziele können für aliasiertes oder antialiasiertes Rendering eingerichtet werden. Für das Rendern von Szenen mit einer großen Anzahl von Grundtypen kann ein Entwickler auch 2D-Grafiken im Aliasmodus rendern und D3D-Multisample-Antialiasing verwenden, um eine höhere Skalierbarkeit zu erzielen.

Renderziele können auch Zeichnungsvorgänge in Ebenen gruppieren, die durch die ID2D1Layer-Schnittstelle dargestellt werden. Layer sind nützlich, um Zeichnungsvorgänge zusammenzusammeln, wenn ein Frame gerendert wird. Für einige Szenarien kann dies eine nützliche Alternative zum Rendern auf ein Bitmap-Render-Target und zur anschließenden Wiederverwendung der Bitmap-Inhalte sein, da die Zuordnungskosten für die Schichtung niedriger sind als bei einem ID2D1BitmapRenderTarget.

Renderziele können neue Renderziele erstellen, die mit sich selbst kompatibel sind. Dies ist nützlich für zwischengeschaltetes Offscreen-Rendering, während die verschiedenen Renderzieleigenschaften beibehalten werden, die für das Original festgelegt wurden.

Es ist auch möglich, mithilfe von GDI auf einem Direct2D-Renderziel zu rendern, indem QueryInterface für ein Renderziel für ID2D1GdiInteropRenderTarget aufgerufen wird, das GetDC - und ReleaseDC-Methoden enthält, die zum Abrufen eines GDI-Gerätekontexts verwendet werden können. Das Rendern über GDI ist nur möglich, wenn das Renderziel mit dem D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE Flag-Satz erstellt wurde. Dies ist nützlich für Anwendungen, die hauptsächlich mit Direct2D gerendert werden, aber über ein Erweiterbarkeitsmodell oder andere Ältere Inhalte verfügen, die die Möglichkeit zum Rendern mit GDI erfordern. Weitere Informationen finden Sie in der Übersicht über Direct2D- und GDI-Interoperabilität.

Ressourcen des Renderziels

Ähnlich wie eine Produktionsstätte kann ein Render-Ziel Zeichnungsressourcen erzeugen. Alle von einem Renderziel erstellten Ressourcen sind geräteabhängige Ressourcen (genau wie das Renderziel). Ein Render-Target kann die folgenden Ressourcentypen erzeugen:

  • Bitmaps
  • Bürsten
  • Schichten
  • Gittermodelle

Zeichnungsbefehle

Zum Rendern von Inhalten verwenden Sie die Renderzielzeichnungsmethoden. Bevor Sie mit dem Zeichnen beginnen, rufen Sie die ID2D1RenderTarget::BeginDraw-Methode auf. Nachdem Sie die Zeichnung abgeschlossen haben, rufen Sie die ID2D1RenderTarget::EndDraw-Methode auf. Zwischen diesen Aufrufen verwenden Sie Draw- und Fill-Methoden, um Zeichnungsressourcen zu rendern. Die meisten Draw- und Fill-Methoden verwenden eine Form (ein Primitiv oder eine Geometrie) und einen Pinsel zum Ausfüllen oder Umreißen der Form.

Renderziele bieten außerdem Methoden zum Abschneiden, Anwenden von Deckkraftmasken und Transformieren des Koordinatenbereichs.

Direct2D verwendet ein linkshändiges Koordinatensystem: Positive x-Achsenwerte gehen nach rechts und positive y-Achsenwerte werden nach unten verschoben.

Fehlerbehandlung

Renderzielzeichnungsbefehle geben nicht an, ob der angeforderte Vorgang erfolgreich war. Um herauszufinden, ob Zeichnungsfehler aufgetreten sind, rufen Sie die Flush-Methode des Renderziels oder die EndDraw-Methode auf, um ein HRESULT abzurufen.

Zeichnungsressourcen

In den folgenden Abschnitten werden einige der Ressourcen beschrieben, die durch die Renderziel- und Factoryschnittstellen erstellt werden können.

Bürsten

Ein Brush, dargestellt durch die ID2D1Brush-Schnittstelle, stellt eine geräteabhängige Ressource dar, die durch ein Renderziel erstellt wird und einen Bereich mit seinem Ergebnis färbt. Verschiedene Pinsel haben unterschiedliche Ergebnistypen. Einige Pinsel zeichnen einen Bereich mit einer Volltonfarbe, andere mit einem Farbverlauf oder einem Bild. Direct2D bietet vier Pinseltypen:

Zum Erstellen eines Pinsels verwenden Sie eine der ID2D1RenderTarget::Create*Brush-Methoden (wobei * ein Platzhalter für einige Pinselnamen ist), z. B. CreateRadialGradientBrush. Pinsel können mit Renderziel-Draw- und -Fill-Methoden verwendet werden, entweder um einen Strich oder eine Kontur zu zeichnen oder als Deckkraftmaske zu dienen.

Weitere Informationen zu Pinseln finden Sie in der Übersicht über Pinsel.

Geometrien

Zusätzlich zu grundlegenden Zeichenformen wie Punkte, Rechtecke und Ellipsen, stellt Direct2D die ID2D1Geometry-Schnittstelle bereit, um einfache und komplexe Formen zu beschreiben. Schnittstellen, die von ID2D1Geometry erben, definieren unterschiedliche Formentypen, z. B. ID2D1RectangleGeometry für die Darstellung von Rechtecke, ID2D1RoundedRectangleGeometry für die Darstellung abgerundeter Rechtecke und ID2D1EllipseGeometry für die Darstellung von Ellipsen.

Komplexere Formen können mithilfe der ID2D1GeometrySink-Schnittstelle erstellt werden, um eine Reihe von Abbildungen anzugeben, die aus Linien, Kurven und Bögen bestehen. Der ID2D1GeometrySink wird an die Open-Methode einer ID2D1PathGeometry übergeben, um eine komplexe Geometrie zu generieren. ID2D1SimplifiedGeometrySink kann auch mit der DirectWrite-API verwendet werden, um Pfadgliederungen formatierten Texts für das künstlerische Rendering zu extrahieren.

Die Geometrieschnittstellen bieten Methoden zum Bearbeiten von Shapes durch Verbreitern oder Vereinfachen vorhandener Geometrien oder durch Generieren der Schnittmenge oder Vereinigung mehrerer Geometrien. Sie bieten auch Methoden an, um zu bestimmen, ob Geometrien sich überschneiden oder überlappen, Begrenzungsinformationen abzurufen, den Bereich oder die Länge einer Geometrie zu berechnen und Standorte entlang einer Geometrie zu interpolieren. Direct2D bietet auch die Möglichkeit, ein Gitter aus Dreiecken zu erstellen, das aus einer Geometrie zerlegt wird.

Zum Erstellen einer Geometrie verwenden Sie eine der ID2D1Factory::Create*Geometry-Methoden (wobei * ein Platzhalter für einen Geometrienamen ist), z. B. CreatePathGeometry. Eine Geometrie ist eine geräteunabhängige Ressource.

Zum Rendern einer Geometrie verwenden Sie die Methoden DrawGeometry und FillGeometry eines Renderziels.

Weitere Informationen zu Geometrien finden Sie in der Geometrieübersicht.

Bitmaps

Direct2D bietet keine Methoden zum Laden oder Speichern von Bitmaps; Stattdessen können Sie Bitmaps mit der Windows-Imageerstellungskomponente (WINDOWS Imaging Component, WIC) erstellen. Bitmapressourcen können mit WIC geladen und dann zum Erstellen einer ID2D1Bitmap über die ID2D1RenderTarget::CreateBitmapFromWicBitmap-Methode verwendet werden.

Bitmaps können auch aus Speicherdaten erstellt werden, die auf andere Weise eingerichtet wurden. Nachdem eine Bitmap erstellt wurde, kann sie mit der DrawBitmap-Methode des Render Targets oder mit einem Bitmappinsel gezeichnet werden.

Da das Erstellen von Bitmapressourcen für Hardwarerenderungsziele häufig ein teurer Vorgang ist, kann Direct2D den Inhalt einer Bitmap (oder eines Teils der Bitmap) mithilfe der Methoden CopyFromBitmap, CopyFromRenderTarget und CopyFromMemory aktualisieren. Die Verwendung dieser Methoden kann potenziell die Kosten für zusätzliche GPU-Texturzuordnungen sparen.

Zeichnungstext

Direct2D wurde entwickelt, um mit den Textvorgängen der neuen Text-API, DirectWrite, zu arbeiten. Um die Verwendung der DirectWrite-API zu vereinfachen, stellen Renderziele drei Methoden zum Rendern von DirectWrite-Textressourcen bereit: DrawText, DrawTextLayout und DrawGlyphRun. Da Direct2D die GPU für den ClearType-Textrenderingprozess verwendet, bietet Direct2D eine geringere CPU-Auslastung als GDI für Textvorgänge und eine bessere Skalierbarkeit, da mehr GPU-Verarbeitungsleistung verfügbar ist.

Der ID2D1RenderTarget::D rawText wurde für die einfachsten Szenarien entwickelt, die das Rendern einer Zeichenfolge von Unicode-Text mit minimaler Formatierung umfassen. Komplexeres Layout und typografische Flexibilität wird über die ID2D1RenderTarget::D rawTextLayout-Methode bereitgestellt, die ein IDWriteTextLayout - Objekt verwendet, um den zu rendernden Inhalt und die Formatierung anzugeben. Mit IDWriteTextLayout können Sie einzelne Formatierungen für Teilzeichenfolgen von Text und andere erweiterte Typografieoptionen angeben.

Für Szenarien, in denen eine genaue Steuerung des Layouts auf Glyphenebene erforderlich ist, kann die ID2D1RenderTarget::D rawGlyphRun-Methode in Verbindung mit den von DirectWrite bereitgestellten Messeinrichtungen verwendet werden.

Um die DirectWrite-API zu verwenden, schließen Sie den dwrite.h-Header ein. Wie Direct2D verwendet DirectWrite eine Factory, IDWriteFactory zum Erstellen von Textobjekten. Verwenden Sie die DWriteCreateFactory-Funktion , um eine Factory zu erstellen, und verwenden Sie dann die Create-Methoden zum Erstellen von DirectWrite-Ressourcen (z. B. IDWriteTextFormat).

Weitere Informationen zu DirectWrite finden Sie im Thema "Einführung in DirectWrite ".

Direct2D-Grundtypen

Direct2D definiert eine Reihe von Grundtypen, die mit anderen Zeichnungs-APIs vergleichbar sind. Sie stellt eine Farbstruktur, eine Matrixstruktur zum Ausführen von Transformationen sowie Gleitkomma- und ganzzahlige Versionen von Punkt, Rechteck, Ellipsen und Größenstrukturen bereit. In der Regel verwenden Sie die Gleitkommaversionen dieser Strukturen.

Sie verwenden keine Factory oder ein Renderziel zum Instanziieren von Direct2D-Grundtypen. Sie können sie direkt erstellen oder die in d2d1helper.h definierten Hilfsmethoden verwenden, um sie zu erstellen.

Direct2D-Referenz

DirectWrite HelloWorld

Einführung in DirectWrite

Ressourcenübersicht

Windows Imaging Component (WIC)