Direct2D est une interface de programmation d'application (API) de graphiques vectoriels 2D conçue par Microsoft et implémentée dans Windows 10 , Windows 8 , Windows 7 et Windows Server 2008 R2 , ainsi que Windows Vista et Windows Server 2008 (avec Platform Update installée).
Direct2D tire parti de l'accélération matérielle via l'unité de traitement graphique ( GPU ) présente dans les cartes graphiques compatibles des ordinateurs personnels, tablettes, smartphones et appareils graphiques modernes. Il offre une qualité visuelle élevée et des performances de rendu rapides tout en maintenant une interopérabilité totale avec les API graphiques Win32 classiques telles que GDI /GDI+ et les API graphiques modernes telles que Direct3D .
Aperçu
Direct2D est une API de code natif basée sur C++ qui peut être appelée par du code managé et utilise une approche « COM légère » tout comme Direct3D , avec une quantité minimale d'abstraction. Cependant, contrairement à WPF et de manière similaire à GDI/GDI+, Direct2D est une API de rendu en « mode immédiat » avec des appels BeginDraw/Draw/EndDraw simples ; Direct2D n'a pas de concept de « scène » et n'utilise pas de structures arborescentes conservées, et l'état de rendu est préservé entre les appels de dessin.
Direct2D peut minimiser l'utilisation du processeur et utiliser le rendu matériel sur une carte graphique avec une prise en charge minimale de Direct3D Feature Level 9 avec les pilotes WDDM 1.1 . Les applications peuvent choisir de l'utiliser exclusivement avec le processeur, ce que l'on appelle le rendu logiciel, en l'utilisant conjointement avec WARP10 dans les situations où la capacité matérielle n'est pas disponible, comme lors de l'exécution sur un périphérique avec une prise en charge minimale du GPU, sous le service de terminal , la session Windows 0 ou lorsque le rendu graphique est effectué sur un serveur distant avec le résultat graphique renvoyé au périphérique client. Les performances de Direct2D et l'utilisation de la mémoire évoluent de manière linéaire avec les comptages primitifs à la fois dans le logiciel et le matériel.
Direct2D prend en charge le rendu de haute qualité avec les fonctionnalités clés suivantes :
- Rendu de texte sous-pixel de haute qualité via DirectWrite pour les techniques de niveaux de gris et ClearType
- Anticrénelage par primitive
- Dessin et remplissage de la géométrie de Bézier
- Opérations géométriques riches (par exemple opérations booléennes , élargissement de chemin, contour, etc.)
- Couches composites
- Modes de fusion primitifs (par exemple, source-over, source-copy, min blends, etc.)
- Effets d'image intégrés et personnalisés pour le réglage des photos, la transformation graphique et des couleurs
- Pinceau et maillage dégradés
- Liste de commandes pour la mise en mémoire tampon et l'impression des commandes
- Trait d'encre évolutif
- Lot de sprites pour le développement de jeux
Direct2D permet une interopérabilité totale avec GDI, GDI+ et permet le rendu vers et depuis une surface Direct3D, ainsi que vers et depuis un contexte de périphérique GDI/GDI+ (HDC). Il peut être utilisé efficacement avec Windows Imaging Component (WIC) pour l'encodage/décodage d'images, et avec DirectWrite pour le formatage de texte et le traitement des polices. Une telle interopérabilité permet aux développeurs de remplacer progressivement les chemins de code critiques par du code Direct2D sans avoir à réviser l'intégralité de leur code source. À l'époque de Windows 10, un projet Open Source appelé Win2D a été développé par Microsoft pour simplifier davantage l'utilisation de Direct2D et DirectWrite dans les applications Universal Windows Platform (UWP). Win2D est un wrapper WinRT hautement efficace de Direct2D et DirectWrite conçu dès le départ pour s'intégrer de manière transparente au contrôle XAML Canvas tout en préservant la puissance du sous-système graphique sous-jacent.
Versions ultérieures
Direct2D 1.1
Une version mise à jour de Direct2D a été lancée avec Windows 8 en octobre 2012. Elle a également été rétroportée vers Windows 7 SP1 (mais pas vers Windows Vista) via la mise à jour de la plateforme Windows 7. La version originale de Direct2D était liée à DirectX 11 (au niveau matériel, jusqu'à Direct3D 10.1 est utilisé), alors que cette version de Direct2D s'intègre à DirectX 11.1. Windows 8 a également ajouté l'interopérabilité entre XAML et Direct2D ainsi que les composants Direct3D, qui peuvent tous être mélangés dans une application.
Direct2D 1.2
De nouvelles fonctionnalités ont été ajoutées à Direct2D avec Windows 8.1 en octobre 2013 : Réalisations géométriques, API d'effets Direct2D, API de liste de commandes, API multithreading, priorité de rendu par appareil, prise en charge des images JPEG YCbCr pour une empreinte mémoire plus petite et prise en charge des formats compressés par blocs (fichiers DDS).
Direct2D 1.3
La sortie de Windows 10 en juillet 2015 a apporté des mises à jour importantes et de nouvelles fonctionnalités à Direct2D, telles que l'amélioration des performances du rendu de texte évolutif sans rastérisation des polices , la possibilité de télécharger la police requise à partir du cloud à la demande sans nécessiter l'étape d'installation de la police, une optimisation pour un chargement d'image et un rendu d'effet d'image plus rapides, et une manière plus sophistiquée d'appliquer un pinceau dégradé grâce à l'utilisation d'un maillage 2D composé de patchs dégradés. Cette version a également introduit une toute nouvelle extension d'API pour prendre en charge l'encre numérique, qui est fortement exploitée par le navigateur Microsoft Edge ainsi que par le contrôle XAML Ink Canvas .
Mise en œuvre
Dans leur article de 2012 sur l'extension OpenGL concurrente de rendu de chemin NV, Mark Kilgard et Jeff Bolz expliquent (et critiquent) les composants internes de Direct2D comme suit : « Direct2D fonctionne en transformant les chemins sur le processeur, puis en effectuant une tessellation trapézoïdale contrainte de chaque chemin. Le résultat est un ensemble de trapèzes dans l'espace des pixels et une géométrie ombrée supplémentaire pour calculer la couverture fractionnaire des bords gauche et droit des trapèzes. Ces trapèzes et cette géométrie ombrée sont ensuite rastérisés par le GPU. Les performances obtenues sont généralement meilleures que les approches entièrement basées sur le processeur et ne nécessitent aucun stockage auxiliaire pour l'état multi-échantillons ou stencil ; Direct2D effectue le rendu directement dans un tampon d'image aliasé avec des résultats correctement anti-aliasés. Le principal inconvénient de Direct2D est que les performances ultimes ne sont pas déterminées par le GPU (effectuant une rastérisation assez triviale) mais plutôt par le processeur effectuant la transformation et la tessellation trapézoïdale de chaque chemin et le travail de validation de Direct3D. »
En juillet 2012, l' équipe Windows 8 a publié ce qui suit sur le blog de Steven Sinofsky : « Pour améliorer les performances de rendu géométrique dans Windows 8, nous nous sommes concentrés sur la réduction du coût CPU associé à la tessellation de deux manières. Tout d'abord, nous avons optimisé notre implémentation de la tessellation lors du rendu de géométries simples comme des rectangles, des lignes, des rectangles arrondis et des ellipses. » Ces optimisations courantes prétendaient améliorer les performances de l'ordre de 184 % à 438 %, selon la primitive. Le message continuait : « Deuxièmement, pour améliorer les performances lors du rendu de géométries irrégulières (par exemple, des frontières géographiques sur une carte), nous utilisons une nouvelle fonctionnalité matérielle graphique appelée Target Independent Rasterization , ou TIR. TIR permet à Direct2D de dépenser moins de cycles CPU sur la tessellation, afin qu'il puisse donner des instructions de dessin au GPU plus rapidement et plus efficacement, sans sacrifier la qualité visuelle. TIR est disponible dans le nouveau matériel GPU conçu pour Windows 8 qui prend en charge DirectX 11.1. » Cette section a été suivie d'un test comparatif utilisant une quinzaine de SVG , faisant état d'améliorations de performances de l'ordre de 151 % à 523 %. La section concluait : « Nous avons travaillé en étroite collaboration avec nos partenaires en matériel graphique pour concevoir TIR. Des améliorations spectaculaires ont été rendues possibles grâce à ce partenariat. Le matériel DirectX 11.1 est déjà sur le marché aujourd'hui et nous travaillons avec nos partenaires pour nous assurer que davantage de produits compatibles TIR seront largement disponibles. »
La fonctionnalité TIR a été l'une de celles qui ont provoqué une « guerre des mots » entre Nvidia et AMD vers décembre 2012, car la famille de GPU Kepler de Nvidia ne la prend pas en charge, alors que GCN d'AMD le fait. En réponse aux demandes des clients, un membre du personnel de support de Nvidia a indiqué que TIR ne peut pas être simplement implémenté au niveau du pilote, mais nécessite un nouveau matériel ; l' architecture Maxwell 2 , introduite en septembre 2014, est un tel matériel.
Sous Windows 8.1 , Direct2D peut utiliser les tesselators matériels Direct3D11, mais uniquement en conjonction avec D2D1_FILL_MODE_ALTERNATE. Si un autre mode de remplissage est utilisé (par exemple D2D1_FILL_MODE_WINDING), Direct2D revient à la tessellation sur le processeur, mais utilise toujours TIR pour l'anticrénelage (si TIR est disponible). Étant donné que la tessellation matérielle est disponible dans la version de base Direct3D11 (pas nécessairement 11.1), Microsoft a déclaré des améliorations de performances significatives avec Direct2D dans Windows 8.1 (par rapport à Windows 8) sur du matériel non TIR.
Utilisations et performances
Internet Explorer 9 et les versions ultérieures utilisent Direct2D et DirectWrite pour améliorer les performances et la qualité visuelle. La prise en charge de Direct2D a été ajoutée dans la version alpha de Firefox 3.7, doublant approximativement sa vitesse de rendu. (Firefox 4 a également ajouté la prise en charge de DirectWrite, mais celle-ci n'a pas été rendue par défaut pour certaines polices dans Firefox 7 en raison de plaintes des utilisateurs concernant la qualité du rendu. Google Chrome utilise sa propre bibliothèque 2D appelée Skia , qui à son tour effectue le rendu via ANGLE sous Windows. ) Dans Firefox 70.0, sur un matériel ancien, Direct2D est désactivé sur les anciens pilotes graphiques mis sur liste noire s'ils manquent de fonctionnalités et que la zone est noircie, par exemple dans Google Maps .
Peter Bright d' Ars Technica a noté à l'été 2012 que « la plupart des applications de bureau n'utilisent pas Direct2D ».
Microsoft Office 2013 prend en charge Direct2D+DirectWrite ou GDI+ Uniscribe pour le rendu d'affichage et la typographie.