Vue d’ensemble de l’API Direct2D

Direct2D fournit une API, similaire à Direct3D, pour une utilisation avec C ou C++. L’API expose une variété de fonctionnalités liées au dessin :

  • Affichez des cibles pour le rendu en mode affichage et hors écran à l’aide de Direct2D, Direct3D ou GDI.
  • Objets pour la gestion de l’état de dessin, tels que les transformations d’espace de coordonnées et les modes d’anticrénelage.
  • Représentations pour les données géométriques et fonctions pour le traitement de la géométrie.
  • Fonctionnalité de rendu pour les bitmaps, les géométries et le texte.
  • Dispositions pour l’utilisation du contenu graphique créé à l’aide de GDI ou Direct3D.

Cette rubrique fournit une vue d’ensemble des objets qui composent l’API Direct2D. Il contient les sections suivantes :

Fichiers d’en-tête Direct2D

L’API Direct2D est définie par les fichiers d’en-tête suivants.

Fichier d’en-tête Description
d2d1.h Définit les versions C et C++ de l’API Direct2D principale.
d2d1helper.h Définit les fonctions d’assistance, les classes et les structures C++.
d2dbasetypes.h Définit des primitives de dessin pour Direct2D, telles que des points et des rectangles. Cet en-tête est inclus avec d2d1.h.
d2derr.h Définit les codes d’erreur pour Direct2D. Cet en-tête est inclus avec d2d1.h.
d2d1_1.h Définit les versions C et C++ de l’API Direct2D principale pour Windows 8 et versions ultérieures.
d2d1_1helper.h Définit les fonctions d’assistance C++, les classes et les structures pour Windows 8 et versions ultérieures.
d2d1effects.h Définit les versions C et C++ de la partie des effets d’image de l’API Direct2D pour Windows 8 et versions ultérieures.
d2d1effecthelpers.h Définit les fonctions d’assistance C++, les classes et les structures de la partie des effets d’image de l’API Direct2D pour Windows 8 et versions ultérieures.

 

Pour utiliser Direct2D, votre application doit inclure le fichier d’en-tête d2d1.h.

Pour compiler une application Direct2D, ajoutez d2d1.lib à la liste des bibliothèques. Vous trouverez d2d1.h et d2d1.lib dans le Kit de développement logiciel (SDK) Windows pour Windows 7.

Les sections suivantes décrivent certaines des interfaces courantes fournies par l’API Direct2D.

Direct2D Interfaces

À la racine de l’API Direct2D se trouvent les interfaces ID2D1Factory et ID2D1Resource . Un objet ID2D1Factory crée des objets ID2D1Resource et sert de point de départ pour l’utilisation de Direct2D. Tous les autres objets Direct2D héritent de l’interface ID2D1Resource . Il existe deux types de ressources Direct2D : les ressources indépendantes de l’appareil et les ressources dépendantes de l’appareil.

  • Les ressources indépendantes de l’appareil ne sont pas associées à un appareil de rendu particulier et peuvent persister pendant la durée de vie d’une application.
  • Les ressources dépendantes de l’appareil sont associées à un appareil de rendu particulier et cessent de fonctionner si cet appareil est supprimé.

(Pour plus d’informations sur les ressources et le partage des ressources, consultez Vue d’ensemble des ressources.)

The ID2D1Factory Interface

L’interface ID2D1Factory est le point de départ de l’utilisation de Direct2D. Vous utilisez un ID2D1Factory pour instancier des ressources Direct2D. Pour créer un ID2D1Factory, vous utilisez l’une des méthodes CreateFactory .

Une fabrique définit un ensemble de méthodes CreateResource qui peuvent produire les ressources de dessin suivantes :

  • Les cibles de rendu sont des objets qui affichent des commandes de dessin.
  • Les blocs d’état de dessin sont des objets qui stockent des informations d’état de dessin, telles que la transformation actuelle et le mode anti-attirail.
  • Les géométries sont des objets qui représentent des formes simples et potentiellement complexes.

L’un des objets les plus utiles qu’une fabrique peut créer est l’ID2D1RenderTarget, décrit dans la section suivante.

Cibles de rendu

Une cible de rendu est une ressource qui hérite de l’interface ID2D1RenderTarget . Une cible de rendu crée des ressources pour le dessin et effectue des opérations de dessin. Il existe plusieurs types de cibles de rendu qui peuvent être utilisées pour afficher des graphiques des manières suivantes :

Étant donné qu’une cible de rendu est associée à un appareil de rendu particulier, il s’agit d’une ressource dépendante de l’appareil et cesse de fonctionner si l’appareil est supprimé.

Fonctionnalités cibles de rendu

Vous pouvez spécifier si une cible de rendu doit utiliser l’accélération matérielle et si l’affichage distant doit être rendu par l’ordinateur local ou distant. Les cibles de rendu peuvent être configurées pour le rendu avec alias ou anti-attirail. Pour les scènes de rendu avec un grand nombre de primitives, un développeur peut également restituer des graphiques 2D en mode alias et utiliser l’anti-écréation multi-échantillon D3D pour obtenir une plus grande scalabilité.

Les cibles de rendu peuvent également regrouper les opérations de dessin en couches représentées par l’interface ID2D1Layer . Les couches sont utiles pour collecter les opérations de dessin à combiner lors du rendu d’un cadre. Dans certains scénarios, cela peut être une alternative utile au rendu sur une cible de rendu bitmap, puis à la réutilisation du contenu bitmap, car les coûts d’allocation pour la superposition sont inférieurs à ceux d’un ID2D1BitmapRenderTarget.

Les cibles de rendu peuvent créer de nouvelles cibles de rendu compatibles avec elles-mêmes, ce qui est utile pour le rendu hors écran intermédiaire tout en conservant les différentes propriétés de cible de rendu qui ont été définies sur l’original.

Il est également possible d’effectuer un rendu à l’aide de GDI sur une cible de rendu Direct2D en appelant QueryInterface sur une cible de rendu pour ID2D1GdiInteropRenderTarget, qui contient des méthodes GetDC et ReleaseDC qui peuvent être utilisées pour récupérer un contexte d’appareil GDI. Le rendu via GDI n’est possible que si la cible de rendu a été créée avec l’indicateur D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE défini. Cela est utile pour les applications qui effectuent principalement un rendu avec Direct2D, mais qui ont un modèle d’extensibilité ou d’autres contenus hérités qui nécessitent la possibilité d’effectuer un rendu avec GDI. Pour plus d’informations, consultez Vue d’ensemble de l’interopérabilité direct2D et GDI.

Rendre les ressources cibles

Comme une fabrique, une cible de rendu peut créer des ressources de dessin. Toutes les ressources créées par une cible de rendu sont des ressources dépendantes de l’appareil (tout comme la cible de rendu). Une cible de rendu peut créer les types de ressources suivants :

  • Images bitmap
  • Pinceaux
  • Calques
  • Maillages

Commandes de dessin

Pour afficher le contenu, vous utilisez les méthodes de dessin cible de rendu. Avant de commencer à dessiner, vous appelez la méthode ID2D1RenderTarget::BeginDraw . Une fois le dessin terminé, vous appelez la méthode ID2D1RenderTarget::EndDraw . Entre ces appels, vous utilisez les méthodes Draw et Fill pour afficher les ressources de dessin. La plupart des méthodes Draw et Fill prennent une forme (primitive ou géométrique) et un pinceau pour remplir ou tracer la forme.

Les cibles de rendu fournissent également des méthodes de découpage, d’application de masques d’opacité et de transformation de l’espace de coordonnées.

Direct2D utilise un système de coordonnées gauche : les valeurs positives de l’axe X passent à droite et les valeurs positives de l’axe y descendent.

Gestion des erreurs

Les commandes de dessin cible de rendu n’indiquent pas si l’opération demandée a réussi. Pour savoir s’il y a eu des erreurs de dessin, appelez la méthode Flush cible de rendu ou la méthode EndDraw pour obtenir un HRESULT.

Ressources de dessin

Les sections suivantes décrivent certaines des ressources qui peuvent être créées par les interfaces cible de rendu et de fabrique.

Pinceaux

Un pinceau, représenté par l’interface ID2D1Brush , est une ressource dépendante de l’appareil, créée par une cible de rendu, qui peint une zone avec sa sortie. Des pinceaux différents ont différents types de sortie. Certains pinceaux peignent une zone avec une couleur unie, d’autres avec un dégradé ou une image. Direct2D fournit quatre types de pinceaux :

Pour créer un pinceau, vous utilisez l’une des méthodes ID2D1RenderTarget::Create*<Type>*Brush, telles que CreateRadialGradientBrush. Les pinceaux peuvent être utilisés avec les méthodes Draw et Fill cibles de rendu, soit pour peindre un trait de forme ou un contour, soit comme masque d’opacité.

Pour plus d’informations sur les pinceaux, consultez Vue d’ensemble des pinceaux.

Géométries

En plus des primitives de dessin de base telles que des points, des rectangles et des points de suspension, Direct2D fournit l’interface ID2D1Geometry pour décrire des formes simples et complexes. Les interfaces qui héritent d’ID2D1Geometry définissent différents types de formes, comme ID2D1RectangleGeometry pour représenter des rectangles, ID2D1RoundedRectangleGeometry pour représenter des rectangles arrondis et ID2D1EllipseGeometry pour la représentation des points de suspension.

Vous pouvez créer des formes plus complexes à l’aide de l’interface ID2D1GeometrySink pour spécifier une série de figures composées de lignes, de courbes et d’arcs. Id2D1GeometrySink est passé à la méthode Open d’un ID2D1PathGeometry pour générer une géométrie complexe. ID2D1SimplifiedGeometrySink peut également être utilisé avec l’API DirectWrite pour extraire les contours de chemin d’accès du texte mis en forme à des fins de rendu artistique.

Les interfaces geometry fournissent des méthodes permettant de manipuler des formes en élargissant ou en simplifiant les géométries existantes, ou en générant l’intersection ou l’union de plusieurs géométries. Ils fournissent également des méthodes permettant de déterminer si les géométries se croisent ou se chevauchent, de récupérer des informations sur les limites, de calculer la surface ou la longueur d’une géométrie et d’interpoler des emplacements le long d’une géométrie. Direct2D offre également la possibilité de créer un maillage de triangles tessellés à partir d’une géométrie.

Pour créer une géométrie, vous utilisez l’une des méthodes ID2D1Factory::Create*<Type>*Geometry, telles que CreatePathGeometry. Une géométrie est une ressource indépendante de l’appareil.

Pour afficher une géométrie, vous utilisez les méthodes DrawGeometry et FillGeometry d’une cible de rendu.

Pour plus d’informations sur les géométries, consultez Vue d’ensemble des géométries.

Images bitmap

Direct2D ne fournit pas de méthodes pour charger ou stocker des bitmaps ; Au lieu de cela, il vous permet de créer des bitmaps à l’aide du composant d’acquisition d’images Windows (WIC). Les ressources bitmap peuvent être chargées à l’aide de WIC, puis utilisées pour créer un ID2D1Bitmap via la méthode ID2D1RenderTarget::CreateBitmapFromWicBitmap .

Les bitmaps peuvent également être créées à partir de données en mémoire qui ont été configurées par d’autres moyens. Une fois qu’une bitmap a été créée, elle peut être dessinée par la méthode DrawBitmap cible de rendu ou avec un pinceau bitmap.

Étant donné que la création de ressources bitmap sur des cibles de rendu matérielles est souvent une opération coûteuse, Direct2D peut mettre à jour le contenu d’une bitmap (ou d’une partie de la bitmap) à l’aide des méthodes CopyFromBitmap, CopyFromRenderTarget et CopyFromMemory . L’utilisation de ces méthodes peut potentiellement réduire les coûts associés aux allocations de texture GPU supplémentaires.

Texte de dessin

Direct2D a été conçu pour fonctionner avec les opérations de texte de la nouvelle API de texte, DirectWrite. Pour simplifier l’utilisation de l’API DirectWrite, les cibles de rendu fournissent trois méthodes de rendu DirectWrite ressources de texte : DrawText, DrawTextLayout et DrawGlyphRun. Étant donné que Direct2D utilise le GPU pour le processus de rendu de texte ClearType, Direct2D offre une utilisation du processeur inférieure à GDI pour les opérations de texte et une meilleure scalabilité à mesure que la puissance de traitement GPU est disponible.

ID2D1RenderTarget::D rawText est conçu pour les scénarios les plus simples impliquant le rendu d’une chaîne de texte Unicode avec une mise en forme minimale. La disposition et la flexibilité typographique plus complexes sont fournies par le biais de la méthode ID2D1RenderTarget::D rawTextLayout , qui utilise un objet IDWriteTextLayout pour spécifier le contenu et la mise en forme à afficher. IDWriteTextLayout vous permet de spécifier une mise en forme individuelle pour les sous-chaînes de texte et d’autres options de typographie avancées.

Pour les scénarios où un contrôle précis de la disposition au niveau du glyphe est nécessaire, la méthode ID2D1RenderTarget::D rawGlyphRun peut être utilisée conjointement avec les installations de mesure fournies par DirectWrite.

Pour utiliser l’API DirectWrite, incluez l’en-tête dwrite.h. Comme Direct2D, DirectWrite utilise une fabrique, IDWriteFactory pour créer des objets texte. Utilisez la fonction DWriteCreateFactory pour créer une fabrique, puis utilisez ses méthodes Create pour créer des ressources DirectWrite (telles que IDWriteTextFormat).

Pour plus d’informations sur DirectWrite, consultez la rubrique Présentation de DirectWrite.

Direct2D Primitives

Direct2D définit un ensemble de primitives similaires à celles fournies par d’autres API de dessin. Il fournit une structure de couleur, une structure matricielle pour effectuer des transformations, ainsi que des versions à virgule flottante et entière des points, rectangles, points de suspension et structures de taille. En règle générale, vous utilisez les versions à virgule flottante de ces structures.

Vous n’utilisez pas une fabrique ou une cible de rendu pour instancier des primitives Direct2D. Vous pouvez les créer directement ou utiliser les méthodes d’assistance définies dans d2d1helper.h pour les créer.

Référence Direct2D

DirectWrite HelloWorld

Présentation de DirectWrite

Vue d’ensemble des ressources

Composant Imagerie Windows (WIC)