Interfejs urządzenia graficznego — Graphics Device Interface

Urządzenie Interfejs graficzny ( GDI ) jest składnikiem dziedzictwo Microsoft Windows odpowiedzialny za reprezentowanie obiektów graficznych i przekazywanie ich do urządzeń wyjściowych , takich jak monitory i drukarki . Aplikacje dla systemu Windows używają interfejsu API systemu Windows do interakcji z GDI, do takich zadań, jak rysowanie linii i krzywych, renderowanie czcionek i obsługa palet . Użytkownik Windows podsystem używa GDI, aby uczynić takie elementy jak UI ram okiennych i menu. Inne systemy mają komponenty podobne do GDI; na przykład: macOS ma Quartz, a X Window System ma X.Org Server .

Najważniejszą przewagą GDI nad bardziej bezpośrednimi metodami dostępu do sprzętu są być może możliwości skalowania i abstrakcyjna reprezentacja urządzeń docelowych. Korzystając z GDI, można rysować na wielu urządzeniach, takich jak ekran i drukarka, i w każdym przypadku oczekiwać odpowiedniej reprodukcji. Ta funkcja jest w centrum większości aplikacji typu „ To, co widzisz, jest tym, co otrzymujesz ” dla systemu Microsoft Windows.

Proste gry, które nie wymagają szybkiego renderowania grafiki, mogą korzystać z GDI. Jednak GDI jest stosunkowo trudne do wykorzystania dla zaawansowanych animacji, brakuje pojęcia do synchronizacji z pojedynczych klatek wideo w karcie graficznej , a braki sprzętowe rasteryzację na 3D. Nowoczesne gry zwykle używają DirectX , Vulkan lub OpenGL .

Szczegóły techniczne

W GDI kontekst urządzenia (DC) definiuje atrybuty tekstu i obrazów dla urządzenia wyjściowego, np. ekranu lub drukarki. GDI utrzymuje rzeczywisty kontekst. Generowanie danych wyjściowych wymaga uchwytu do kontekstu urządzenia (HDC). Po wygenerowaniu danych wyjściowych uchwyt mógł zostać zwolniony.

GDI używa algorytmu rysowania linii Bresenhama do rysowania aliasowanych linii.

Historia wersji

Wczesne wersje

GDI był obecny w początkowej wersji systemu Windows. Programy MS-DOS do tej pory manipulowały sprzętem graficznym za pomocą przerwań programowych (czasami przez BIOS wideo ) i bezpośrednio manipulując pamięcią wideo . Kod napisany w ten sposób oczekuje, że jest jedynym użytkownikiem pamięci wideo, co nie było możliwe w środowisku wielozadaniowym , takim jak Windows. BYTE magazyn, w grudniu 1983 roku, omówiono plany Microsoftu dla systemu do grafiki wyjściowych do obu drukarek i monitorów z tego samego kodu w zbliżającej się pierwszej wersji systemu Windows.

Windows XP

Wraz z wprowadzeniem Windows XP , GDI+ uzupełnił GDI. GDI+ został napisany w C++. Dodaje antyaliasowaną grafikę 2D, współrzędne zmiennoprzecinkowe, cieniowanie gradientowe, bardziej złożone zarządzanie ścieżkami, nieodłączną obsługę nowoczesnych formatów plików graficznych, takich jak JPEG i PNG oraz obsługę kompozycji transformacji afinicznych w potoku widoku 2D. GDI+ używa wartości RGBA do reprezentowania koloru. Korzystanie z tych funkcji jest widoczne w składnikach systemu Windows XP, takich jak Microsoft Paint , Przeglądarka obrazów i faksów systemu Windows , Kreator drukowania zdjęć oraz wygaszacz ekranu My Pictures Slideshow. Ich obecność w podstawowej warstwie graficznej znacznie upraszcza implementacje systemów grafiki wektorowej, takich jak Adobe Flash czy SVG . Poza tym .NET Framework zapewnia zarządzany interfejs dla GDI+ za pośrednictwem System.Drawing przestrzeni nazw .

Chociaż GDI+ jest dołączony do systemu Windows XP i nowszych, biblioteka dynamiczna GDI+ może być również dostarczana z aplikacją i używana w starszych wersjach systemu Windows.

Ze względu na dodatkowe możliwości przetwarzania tekstu i niezależności rozdzielczości w GDI+, procesor wykonuje renderowanie tekstu. Rezultatem jest o rząd wielkości wolniejszy niż GDI z akceleracją sprzętową . Chris Jackson opublikował kilka testów wskazujących, że fragment kodu renderującego tekst, który napisał, może renderować 99 000 glifów na sekundę w GDI, ale ten sam kod używający GDI+ renderował 16 600 glifów na sekundę.

GDI+ jest podobny (pod względem celu i struktury) do podsystemu QuickDraw GX firmy Apple oraz bibliotek open-source libart i Cairo .

Windows Vista

W systemie Windows Vista wszystkie aplikacje systemu Windows, w tym aplikacje GDI i GDI+, działają w nowym silniku komponowania — Desktop Window Manager (DWM), który jest akcelerowany sprzętowo. W związku z tym sam GDI nie jest już akcelerowany sprzętowo. Ze względu na charakter operacji kompozycji, przesuwanie okien może być szybsze lub bardziej responsywne, ponieważ zawartość nie musi być ponownie renderowana przez aplikację.

System Windows 7

Windows 7 zawiera akcelerację sprzętową GDI do operacji blittingu w modelu Windows Display Driver Model v1.1 . Poprawia to wydajność GDI i pozwala DWM używać lokalnej pamięci wideo do komponowania, zmniejszając w ten sposób zużycie pamięci systemowej i zwiększając wydajność operacji graficznych. Większość prymitywnych operacji GDI nadal nie jest przyspieszana sprzętowo, w przeciwieństwie do Direct2D . GDI+ nadal polega na renderowaniu oprogramowania w systemie Windows 7.

Drukarki GDI

Drukarka GDI lub Winprinter (analogicznie do Winmodem ) to drukarka zaprojektowana do przyjmowania danych wyjściowych z komputera hosta z systemem Windows. Komputer hosta wykonuje całe przetwarzanie drukowania: GDI renderuje stronę jako bitmapę, którą sterownik drukarki odbiera, przetwarza i wysyła do skojarzonej drukarki. Połączenie GDI i sterownika jest dwukierunkowe; otrzymują informacje z drukarki, na przykład, czy jest gotowa do drukowania lub czy skończył się papier.

Drukarki, które nie opierają się na GDI, wymagają sprzętu, oprogramowania układowego i pamięci do renderowania stron, podczas gdy drukarka GDI używa do tego komputera hosta. Jednak drukarka z własnym językiem sterowania może akceptować dane wejściowe z dowolnego urządzenia z odpowiednim sterownikiem, podczas gdy drukarka GDI wymaga komputera z systemem Windows. Drukarki GDI mogą być udostępniane komputerom w sieci, jeśli są podłączone jako drukarki udostępnione na komputerze z systemem Windows. Niektóre „ogólne” sterowniki GDI, takie jak pnm2ppazostały napisane; mają na celu uczynienie drukarek GDI kompatybilnymi z systemami operacyjnymi innymi niż Windows, takimi jak FreeBSD , ale nie mogą obsługiwać wszystkich drukarek.

Aby umożliwić prostsze tworzenie sterowników dla Winprinterów, stworzono uniwersalny sterownik drukarki firmy Microsoft . Dzięki temu dostawcy drukarek mogą pisać „ministerowniki” ogólnego opisu drukarki (GPD), które opisują możliwości drukarki i zestaw poleceń w postaci zwykłego tekstu, bez konieczności opracowywania sterowników trybu jądra.

Firma Microsoft odeszła od tego modelu drukowania za pomocą specyfikacji Open XML Paper .

Ograniczenia

Każde okno zużywa obiekty GDI. Wraz ze wzrostem złożoności okna, wraz z dodatkowymi funkcjami, takimi jak przyciski i obrazy, wzrasta również wykorzystanie obiektu GDI. Gdy używanych jest zbyt wiele obiektów, system Windows nie może narysować więcej obiektów GDI, co prowadzi do nieprawidłowego działania oprogramowania oraz zawieszania i braku odpowiedzi programu. Wiele aplikacji jest również nieprawidłowo zakodowanych i nie zwalnia obiektów GDI po użyciu, co dodatkowo pogłębia problem. Całkowita liczba dostępnych obiektów GDI różni się w zależności od wersji systemu Windows: Windows 9x miał limit 1200 obiektów; Windows 2000 ma limit 16 384 obiektów; i Windows XP i nowsze mają konfigurowalny limit (za pośrednictwem rejestru), który domyślnie wynosi 10 000 obiektów na proces (ale teoretycznie maksymalnie 65 536 dla całej sesji). Windows 8 i nowsze zwiększają limit obiektów GDI do 65 536 na sesję logowania użytkownika.

Wcześniejsze wersje systemu Windows, takie jak Windows 3.1 i Windows 98, zawierały program Resource Meter, aby umożliwić użytkownikowi monitorowanie, jaka część wszystkich zasobów GDI systemu była w użyciu. Ten miernik zasobów zużywał same obiekty GDI. Późniejsze wersje, takie jak Windows 2000 i Windows XP, mogą raportować użycie obiektów GDI dla każdego programu w Menedżerze zadań, ale nie mogą informować użytkownika o całkowitej dostępnej pojemności GDI.

Przepełniona pojemność GDI może wpływać na sam system Windows, uniemożliwiając otwieranie nowych okien, wyświetlanie menu i wyświetlanie okien alertów. Sytuacja może być trudna do wyjaśnienia i potencjalnie może wymagać wymuszonego resetu systemu, ponieważ uniemożliwia to działanie podstawowych programów systemowych. W systemach Windows 8 i 8.1 wymuszone wylogowanie występuje w wyniku przepełnienia pojemności GDI zamiast ponownego uruchomienia.

Następca

Direct2D jest następcą GDI i GDI+. Jego brat, DirectWrite , zastępuje Uniscribe . Zostały dostarczone z systemami Windows 7 i Windows Server 2008 R2 i były dostępne dla systemów Windows Vista i Windows Server 2008 (z zainstalowaną aktualizacją platformy). Później Microsoft opracował Win2D , darmową bibliotekę klas typu GDI o otwartym kodzie źródłowym . Docelowymi odbiorcami Win2D są programiści, którzy używają C++, C# i Visual Basic.NET do tworzenia aplikacji Universal Windows Platform .

Zobacz też

Uwagi i referencje

Zewnętrzne linki