Direct2D - Direct2D

Direct2D to interfejs programowania aplikacji grafiki wektorowej 2D (API) 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 szybkie renderowanie przy zachowaniu pełnej interoperacyjności z klasycznymi graficznymi interfejsami API Win32, takimi jak GDI / GDI +, oraz nowoczesnymi graficznymi interfejsami API, takimi jak Direct3D .

Przegląd

Direct2D to interfejs API kodu natywnego oparty na C ++, który może być wywoływany przez kod zarządzany i wykorzystuje podejście „lekkiego COM ”, podobnie jak Direct3D , przy minimalnej abstrakcji. Jednak w przeciwieństwie do WPF i podobnie do GDI / GDI +, Direct2D jest interfejsem API renderowania „trybu natychmiastowego” z prostymi wywołaniami BeginDraw / Draw / EndDraw; Direct2D nie ma pojęcia „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 z minimalną obsługą Direct3D Feature Level 9 ze sterownikami WDDM 1.1 . Aplikacje mogą zdecydować się na używanie 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, np. Podczas pracy w urządzeniu z minimalną obsługą GPU, w ramach usługi terminalowej , sesji Windows 0 lub gdy renderowanie grafiki jest wykonywane na serwerze zdalnym, a wynik graficzny jest przesyłany z powrotem do urządzenia klienckiego. Wydajność Direct2D i użycie pamięci skalują się liniowo z prymitywnymi licznikami zarówno w oprogramowaniu, jak i sprzęcie.

Direct2D obsługuje renderowanie w wysokiej jakości z następującymi kluczowymi funkcjami:

  • Wysokiej jakości renderowanie tekstu subpikselowego przez DirectWrite zarówno w skali szarości, jak i technice ClearType
  • Per-prymitywnego antyaliasingu
  • Geometria Béziera rysuj i wypełniaj
  • Bogate operacje geometryczne (np. Operacje logiczne , poszerzanie ścieżki, konturowanie itp.)
  • Warstwy kompozytowe
  • Prymitywne tryby mieszania (np. Nadpisywanie źródła, kopiowanie źródła, mieszanie min itp.)
  • Wbudowane obrazy i niestandardowe efekty do dostosowywania zdjęć, przekształcania grafiki i kolorów
  • Gradientowy pędzel i siatka
  • Lista poleceń do buforowania i drukowania poleceń
  • Skalowalne pociągnięcie tuszem
  • Partia sprite'ów do tworzenia gier

Direct2D umożliwia pełną współpracę z GDI, GDI + i umożliwia renderowanie do iz powierzchni Direct3D, a także do iz kontekstu urządzenia GDI / GDI + (HDC). Może być skutecznie używany razem z komponentem 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 zmiany całego kodu źródłowego. W ramach czasowych systemu Windows 10 firma Microsoft opracowała projekt Open Source o nazwie Win2D, aby jeszcze bardziej uprościć korzystanie z Direct2D i DirectWrite w aplikacji Universal Windows Platform (UWP). Win2D jest wysoce wydajny WinRT owinięcie z Direct2D i DirectWrite zaprojektowany od podstaw z myślą o integracji z kontrolą XAML Canvas zachowując moc bazowego graficznej podsystemu.

Kolejne wersje

Direct2D 1.1

Zaktualizowana wersja Direct2D została uruchomiona w systemie Windows 8 w październiku 2012 r. Została również przeniesiona do systemu Windows 7 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żywana jest wersja do Direct3D 10.1), podczas gdy ta wersja Direct2D integruje się z DirectX 11.1. Windows 8 dodał również współdziałanie 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 Windows 8.1 w październiku 2013: Realizacje geometrii , API efektów Direct2D, API listy poleceń, wielowątkowe API, priorytet renderowania na urządzenie, obsługa obrazów JPEG YCbCr w celu zmniejszenia zajmowanej pamięci oraz obsługa formatów skompresowanych blokowo ( 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ść pobierania potrzebnej czcionki z chmury na żądanie bez konieczności instalowania czcionki, optymalizacja przyspieszające ładowanie obrazu i renderowanie efektów graficznych, a także bardziej wyrafinowany sposób nakładania pędzla gradientowego za pomocą siatki 2D wykonanej z płatów 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 zupełnie nową przeglądarkę Microsoft Edge, a także nową kontrolkę XAML dla kanwy atramentowej .

Realizacja

Mark Kilgard i Jeff Bolz w swoim artykule z 2012 roku na temat konkurencyjnego rozszerzenia ścieżki NV renderującej OpenGL wyjaśniają (i krytykują) wewnętrzne cechy Direct2D w następujący sposób: „Direct2D działa poprzez przekształcanie ścieżek na procesorze, a następnie wykonywanie ograniczonej trapezoidalnej teselacji każdej ścieżki. Rezultatem jest zestaw trapezów w przestrzeni pikseli i dodatkowej cieniowanej geometrii do obliczenia pokrycia ułamkowego dla lewej i prawej krawędzi trapezów. Te trapezoidy i cieniowana geometria są następnie rasteryzowane przez GPU. Wynikowa wydajność jest ogólnie lepsza niż w przypadku całkowitego procesora. oparte na podejściach i nie wymaga dodatkowej pamięci dla stanu wielopróbkowego lub szablonu ; Direct2D renderuje bezpośrednio do aliasowanego bufora ramki z odpowiednio wygładzonymi wynikami. Główną wadą Direct2D jest to, że ostateczna wydajność nie jest określana przez GPU (wykonujący dość trywialną rasteryzację), ale raczej przez CPU wykonujący transformację i trapezoidalną teselację każdej ścieżki oraz walidację Direct3D n pracy. "

W lipcu 2012 r. Zespół Windows 8 opublikował na blogu Stevena Sinofsky'ego : „Aby poprawić wydajność renderowania geometrii w systemie Windows 8, skupiliśmy się na zmniejszeniu 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 miały poprawić wydajność w zakresie od 184% do 438%, w zależności od prymitywu. Post kontynuował: „Po drugie, aby poprawić wydajność podczas renderowania nieregularnej geometrii (np. Granic geograficznych na mapie), używamy nowej funkcji sprzętu graficznego o nazwie Target Independent Rasterization lub TIR. TIR umożliwia Direct2D spędzanie mniej cykli procesora na teselacji, więc może szybciej i wydajniej przekazywać instrukcje rysowania procesorowi graficznemu, 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 wykorzystujący około 15 plików SVG , wykazując poprawę wydajności w zakresie od 151% do 523%. W części podsumowano: „Ś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 drastyczne ulepszenia. Sprzęt obsługujący 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ą i AMD około grudnia 2012 roku, ponieważ rodzina kart graficznych Kepler firmy Nvidia jej nie obsługuje, podczas gdy GCN AMD tak. W odpowiedzi na żądania klientów pracownik działu pomocy technicznej firmy Nvidia stwierdził, że TIR nie może być po prostu wdrożony na poziomie kierowcy, ale wymaga nowego sprzętu; Maxwell 2 architektura, wprowadzony we wrześniu 2014 roku, jest taki sprzęt.

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łniania (np. D2D1_FILL_MODE_WINDING ), Direct2D powraca do teselacji na CPU, ale nadal używa TIR do wygładzania krawędzi (jeśli TIR jest dostępny). Ponieważ teselacja sprzętowa jest dostępna w podstawowym Direct3D11 (niekoniecznie 11.1), Microsoft stwierdził 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ą Direct2D i DirectWrite w celu zwiększenia wydajności i jakości wizualnej. Wsparcie Direct2D dodano w wersji alfa z Firefox 3.7, w przybliżeniu podwojenie szybkości oddawania. (Firefox 4 dodał również obsługę DirectWrite, ale w przypadku niektórych czcionek w Firefoksie 7 ta opcja nie była domyślna z powodu skarg użytkowników dotyczących jakości renderowania. Google Chrome korzysta z własnej biblioteki 2D o nazwie Skia , która z kolei renderuje za pomocą ANGLE w systemie Windows). W Firefoksie 70.0 na starym sprzęcie Direct2D jest wyłączane na czarnej liście starych sterowników graficznych, jeśli brakuje im funkcji i obszar jest zaciemniony, np. W Mapach Google .

Peter Bright z Ars Technica zauważył latem 2012 r., Że „większość aplikacji komputerowych nie korzysta z Direct2D”.

Microsoft Office 2013 obsługuje Direct2D + DirectWrite lub GDI + Uniscribe do renderowania wyświetlacza i typografii.

Zobacz też

Bibliografia

Linki zewnętrzne