Direct2D
Direct2D to interfejs programowania aplikacji (API) grafiki wektorowej 2D zaprojektowany przez firmę Microsoft i zaimplementowany w systemach Windows 10 , Windows 8 , Windows 7 i Windows Server 2008 R2 , a także Windows Vista i Windows Server 2008 (z zainstalowaną aktualizacją platformy ).
Direct2D wykorzystuje akcelerację sprzętową za pośrednictwem procesora graficznego ( GPU ) znajdującego się w kompatybilnych kartach graficznych w komputerze osobistym, tablecie, smartfonie i nowoczesnym urządzeniu graficznym. Oferuje wysoką jakość wizualną i szybką wydajność renderowania przy zachowaniu pełnej interoperacyjności z klasycznymi interfejsami graficznymi Win32, takimi jak GDI /GDI+, oraz nowoczesnymi interfejsami graficznymi, takimi jak Direct3D .
Przegląd
Direct2D to interfejs API kodu natywnego oparty na języku C++ , który może być wywoływany przez kod zarządzany i wykorzystuje podejście „lekkiego COM ”, podobnie jak Direct3D , z minimalną ilością abstrakcji. Jednak w przeciwieństwie do WPF i podobnie do GDI/GDI+, Direct2D jest interfejsem API renderującym w trybie „natychmiastowym” z prostymi wywołaniami BeginDraw/Draw/EndDraw; Direct2D nie ma koncepcji „sceny” i nie używa zachowanych struktur drzewiastych, a stan renderowania jest zachowywany między wywołaniami rysowania.
Direct2D może zminimalizować użycie procesora i wykorzystać renderowanie sprzętowe na karcie graficznej przy minimalnej obsłudze Direct3D Feature Level 9 ze sterownikami WDDM 1.1 . Aplikacje mogą zdecydować się na użycie go wyłącznie z procesorem, tak zwane renderowanie programowe, używając go w połączeniu z WARP10 w sytuacjach, gdy możliwości sprzętowe nie są dostępne, na przykład podczas działania w urządzeniu z minimalną obsługą GPU, w ramach usługi terminalowej , sesji Windows , or when graphics rendering is performed in a remote server with the graphical result sent back to the client device. Direct2D performance and memory usage scale linearly with primitive counts in both software and hardware.
Direct2D obsługuje wysokiej jakości renderowanie z następującymi kluczowymi funkcjami:
- Wysokiej jakości renderowanie tekstu subpikselowego za pośrednictwem DirectWrite zarówno w technice skali szarości, jak i technologii ClearType
- Per-prymitywne antyaliasing
- Rysowanie i wypełnianie geometrii Béziera
- Bogate operacje na geometrii (np. operacje boolowskie , poszerzanie ścieżek, obrysowywanie itp.)
- Warstwy kompozytowe
- Prymitywne tryby mieszania (np. source-over, source-copy, min blends, itp.)
- Wbudowane i niestandardowe efekty obrazu do dopasowywania zdjęć, transformacji graficznej i kolorystycznej
- gradientowy i siatka
- Lista poleceń do buforowania i drukowania poleceń
- Skalowalny skok atramentu
- Sprite do tworzenia gier
Direct2D umożliwia pełną interoperacyjność z GDI, GDI+ i pozwala na renderowanie do i z powierzchni Direct3D, jak również do iz kontekstu urządzenia GDI/GDI+ (HDC). Może być skutecznie używany razem z Windows Imaging Component (WIC) do kodowania/dekodowania obrazu oraz z DirectWrite do formatowania tekstu i przetwarzania czcionek. Taka interoperacyjność umożliwia programistom stopniowe zastępowanie krytycznych ścieżek kodu kodem Direct2D bez konieczności przeglądania całego kodu źródłowego. W ramach czasowych systemu Windows 10 firma Microsoft opracowała projekt Open Source o nazwie Win2D w celu dalszego uproszczenia korzystania z Direct2D i DirectWrite w Universal Windows Platform (UWP). Win2D to wysoce wydajne WinRT Direct2D i DirectWrite zaprojektowane od podstaw w celu bezproblemowej integracji z kontrolkami XAML Canvas przy jednoczesnym zachowaniu mocy podstawowego podsystemu graficznego.
Kolejne wersje
Direct2D 1.1
Zaktualizowana wersja Direct2D została uruchomiona wraz z systemem Windows 8 w październiku 2012 r. Została również przeniesiona z powrotem do systemu Windows 7 z dodatkiem SP1 (ale nie do systemu Windows Vista) za pośrednictwem aktualizacji platformy Windows 7 . Oryginalna wersja Direct2D była powiązana z DirectX 11 (sprzętowo używany jest Direct3D 10.1), podczas gdy ta wersja Direct2D integruje się z DirectX 11.1. Windows 8 dodał także interoperacyjność między XAML i Direct2D wraz ze składnikami Direct3D, które można mieszać w aplikacji.
Direct2D 1.2
Nowe funkcje zostały dodane do Direct2D z systemem Windows 8.1 w październiku 2013 r.: realizacje geometrii, interfejs API efektów Direct2D, interfejs API listy poleceń, wielowątkowe interfejsy API, priorytet renderowania na urządzenie, obsługa obrazów JPEG YCbCr w celu zmniejszenia zużycia pamięci oraz obsługa skompresowanych formatów blokowych ( pliki DDS).
Direct2D 1.3
Wydanie systemu Windows 10 w lipcu 2015 r. przyniosło ważne aktualizacje i nowe funkcje Direct2D, takie jak poprawa wydajności renderowania skalowalnego tekstu bez rasteryzacji czcionek , możliwość pobrania potrzebnej czcionki z chmury na żądanie bez konieczności instalowania czcionki, optymalizacja do szybszego ładowania obrazu i renderowania efektów obrazu oraz bardziej wyrafinowany sposób nakładania pędzla gradientu za pomocą siatki 2D utworzonej z łat gradientu. W tej wersji wprowadzono również zupełnie nowe rozszerzenie interfejsu API do obsługi cyfrowego pisma odręcznego, które jest w dużym stopniu wykorzystywane przez przeglądarkę Microsoft Edge oraz kontrolkę XAML płótna pisma odręcznego .
Realizacja
W swoim artykule z 2012 roku na temat konkurencyjnego rozszerzenia OpenGL renderującego ścieżkę NV, Mark Kilgard i Jeff Bolz wyjaśniają (i krytykują) wewnętrzne elementy Direct2D w następujący sposób: „Direct2D działa poprzez przekształcanie ścieżek na procesorze, a następnie wykonywanie ograniczonej teselacji trapezoidalnej każdej ścieżki. Rezultatem jest zestaw trapezów w przestrzeni pikseli i dodatkowa cieniowana geometria do obliczenia ułamkowego pokrycia lewej i prawej krawędzi trapezów. Te trapezy i cieniowana geometria są następnie rastrowane przez GPU. Wynikowa wydajność jest generalnie lepsza niż całkowicie CPU- oparte na podejściach i nie wymaga dodatkowej pamięci masowej dla stanu multisample lub szablonu ; Direct2D renderuje bezpośrednio do aliasowanego bufora ramki z odpowiednio antyaliasowanymi wynikami. Podstawową wadą Direct2D jest to, że ostateczna wydajność nie jest określana przez GPU (wykonujący dość trywialną rasteryzację), ale raczej przez procesor wykonujący transformację i teselację trapezoidalną każdej ścieżki oraz sprawdzanie poprawności Direct3D”.
W lipcu 2012 r. zespół ds. systemu Windows 8 zamieścił na blogu Stevena Sinofsky'ego następujący wpis: „Aby poprawić wydajność renderowania geometrii w systemie Windows 8, skupiliśmy się na obniżeniu kosztów procesora związanych z teselacją na dwa sposoby. Po pierwsze, zoptymalizowaliśmy naszą implementację teselacji podczas renderowania prostych geometrii, takich jak prostokąty, linie, zaokrąglone prostokąty i elipsy”. Te typowe optymalizacje rzekomo poprawiły wydajność w zakresie od 184% do 438%, w zależności od prymitywu. W poście kontynuowano: „Po drugie, aby poprawić wydajność podczas renderowania nieregularnej geometrii (np. granic geograficznych na mapie), używamy nowej funkcji sprzętowej grafiki o nazwie Target Independent Rasterization lub TIR. TIR umożliwia Direct2D poświęcanie mniejszej liczby cykli procesora na teselację, więc może przekazywać GPU instrukcje rysowania szybciej i wydajniej, bez utraty jakości wizualnej. TIR jest dostępny w nowym sprzęcie GPU zaprojektowanym dla systemu Windows 8, który obsługuje DirectX 11.1”. Następnie przeprowadzono test porównawczy z wykorzystaniem około 15 plików SVG , w którym stwierdzono poprawę wydajności w zakresie od 151% do 523%. W sekcji zakończono: „Ściśle współpracowaliśmy z naszymi partnerami w zakresie sprzętu graficznego, aby zaprojektować TIR. Dzięki tej współpracy możliwe były radykalne ulepszenia. Sprzęt DirectX 11.1 jest już dostępny na rynku i współpracujemy z naszymi partnerami, aby zapewnić więcej TIR- zdolne produkty będą szeroko dostępne”.
Funkcja TIR była jedną z tych, które wywołały „wojnę na słowa” między Nvidią a AMD około grudnia 2012 r., Ponieważ rodzina procesorów graficznych Nvidia Kepler jej nie obsługuje, podczas gdy GCN AMD tak. W odpowiedzi na żądania klientów, pracownik pomocy technicznej Nvidii napisał, że TIR nie może być po prostu zaimplementowany na poziomie sterownika, ale wymaga nowego sprzętu; takim sprzętem jest wprowadzona we wrześniu 2014 r. architektura Maxwell 2 .
W systemie Windows 8.1 Direct2D może używać teselatorów sprzętowych Direct3D11, ale tylko w połączeniu z D2D1_FILL_MODE_ALTERNATE
. Jeśli używany jest inny tryb wypełnienia (np. D2D1_FILL_MODE_WINDING
), wówczas Direct2D powraca do teselacji na CPU, ale nadal używa TIR do antyaliasingu (jeśli TIR jest dostępny). Ponieważ teselacja sprzętowa jest dostępna w podstawowym Direct3D11 (niekoniecznie 11.1), Microsoft zadeklarował znaczną poprawę wydajności dzięki Direct2D w Windows 8.1 (w porównaniu z Windows 8) na sprzęcie innym niż TIR.
Zastosowania i wydajność
Internet Explorer 9 i nowsze wersje używają technologii Direct2D i DirectWrite w celu zwiększenia wydajności i jakości obrazu. Obsługa Direct2D została dodana w wersji alfa przeglądarki Firefox 3.7, co z grubsza podwoiło szybkość renderowania. (Firefox 4 dodał również obsługę DirectWrite, ale nie była ona domyślna dla niektórych czcionek w Firefoksie 7 ze względu na skargi użytkowników dotyczące jakości renderowania. Google Chrome używa własnej biblioteki 2D o nazwie Skia , która z kolei renderuje przez ANGLE w systemie Windows.) W Firefoksie 70.0, na starym sprzęcie, Direct2D jest wyłączone na starych sterownikach graficznych z czarnej listy, jeśli brakuje im funkcji, a obszar jest zaciemniony, np. w Mapach Google .
Ars Technica zauważył latem 2012 roku, że „większość aplikacji komputerowych nie korzysta z Direct2D”.
Microsoft Office 2013 obsługuje Direct2D+DirectWrite lub GDI+ Uniscribe do renderowania wyświetlania i typografii.
Zobacz też
- DirectX
- Direct3D
- Cairo – wieloplatformowa biblioteka grafiki wektorowej
- OpenVG
- Prosta i szybka biblioteka multimedialna
- Ramy Starlinga
- Kwarc 2D
Linki zewnętrzne
- Główna strona Direct2D w MSDN z linkami do przewodnika programowania , nowych funkcji w Windows 8.1 , interoperacyjności z Direct3D , itp.
- Blog głównego programisty Direct2D, Thomasa Olsena
- Blog programisty Direct2D, Toma Mulcahy'ego
- Windows 7: Przedstawiamy Direct2D i DirectWrite — wideo PDC 2008
- Windows API Code Pack dla Microsoft .NET Framework — umożliwia tworzenie aplikacji Direct2D w kodzie zarządzanym
- Przedstawiamy Direct2D — wydanie magazynu MSDN z czerwca 2009 r
- Rysowanie za pomocą Direct2D — wrześniowe wydanie magazynu MSDN 2009
- Direct2D API dla Microsoft .Net Framework 4 - Direct2D API dla Microsoft .Net Framework 4
- Aplikacja USPTO do rasteryzacji niezależnej od celu
- Podręcznik migracji Direct2D 1.1 dla programistów Windows 7
- Kolumna Charlesa Petzolda na temat DirectX zawiera kilka artykułów na temat Direct2D, począwszy od wprowadzających, takich jak Triangles and Tessellation lub Direct2D Geometrys and Their Manipulations, po bardziej zaawansowane, takie jak Finger Painting with Direct2D Geometrys , A 2D Portal into a 3D World , itp.