Najlepsze pytania
Chronologia
Czat
Perspektywa
Graphics Device Interface
komponent systemów operacyjnych Microsoft Windows odpowiedzialny za przedstawianie obiektów w urządzeniach wyjściowych takich jak monitory i drukarki Z Wikipedii, wolnej encyklopedii
Remove ads
Graphics Device Interface (GDI) – starszy komponent systemów operacyjnych Microsoft Windows, odpowiedzialny za przedstawianie obiektów graficznych i przesyłanie ich do urządzeń wyjściowych, takich jak monitory i drukarki. Został zastąpiony przez interfejs programowania aplikacji (API) DirectDraw, później także przez API Direct2D. Aplikacje Windows używają Windows API do interakcji z GDI, do obsługi zadań takich jak rysowanie linii i krzywych, renderowania fontów oraz obsługi palet kolorów.


Podsystem Windows USER używa GDI do renderowania elementów interfejsu użytkownika takie jak obramowania okien i menu. Inne systemy operacyjne posiadają komponenty podobne do GDI; przykładowo Mac OS miał QuickDraw, z kolei Linux i Unix zawierają X Window System.
Do najbardziej znaczących aspektów przewagi GDI nad bardziej bezpośrednimi metodami dostępu do sprzętu można zaliczyć umiejętność skalowania oraz abstrakcyjne reprezentowanie urządzeń docelowych. Korzystając z GDI można rysować na wielu urządzeniach, takich jak monitor i drukarka oraz spodziewać się prawidłowego odwzorowania w każdym przypadku. Cecha ta leży u podstaw większości programów WYSIWYG (ang. what you see is what you get, „to co widzisz jest tym co dostajesz”) dla systemów Windows.
Proste gry nie wymagające szybkiego renderowania grafiki mogą korzystać z GDI. Jednakże GDI jest relatywnie trudnym do użytku do zaawansowanych animacji, nie potrafiąc synchronizować z pojedynczymi klatkami wideo w karcie graficznej oraz braku obsługi sprzętowej rasteryzacji dla 3D. Współczesne gry przeważnie wykorzystują DirectX, Vulkan i OpenGL.
Remove ads
Szczegóły techniczne
W GDI kontekst urządzenia (ang. device context, DC) definiuje atrybuty tekstu i obrazów dla urządzenia wyjściowego, np. monitora czy drukarki. GDI obsługuje aktualny kontekst. Generowanie danych wyjściowych wymaga uchwytu do kontekstu urządzenia (ang. handle to the device context, HDC). Po wygenerowaniu danych wyjściowych, uchwyt może zostać zwolniony.
GDI korzysta z algorytmu Bresenhama do rysowania aliasowanych linii[1].
Remove ads
Historia wersji
Podsumowanie
Perspektywa
Wczesne wersje
GDI było obecne w początkowym wydaniu Windows. Programy MS-DOS sterowały sprzętem graficznym poprzez przerwania programowe (czasem przez BIOS wideo) oraz bezpośrednią manipulacją pamięcią wideo. Zapisywany w ten sposób kod oczekuje bycia jedynym użytkownikiem pamięci wideo, co nie było możliwe do utrzymania w środowisku wielozadaniowym, takim jak Windows. Magazyn BYTE w grudniu 1983 roku omawiał plany Microsoftu dotyczące systemu, który w nadchodzącej pierwszej wersji Windows będzie mógł wyświetlać grafikę zarówno na drukarkach, jak i monitorach za pomocą tego samego kodu[2].
W Windows 3.1x oraz Windows 9x GDI może używać funkcji bit blit dla akceleracji 2D przy odpowiednim sterowniku do karty graficznej[3].
Windows XP
Wraz z wprowadzeniem Windows XP, GDI+ uzupełniło GDI. GDI+, napisane w języku C++, dodaje antyaliasing do grafiki 2D, współrzędne zmiennoprzecinkowe, cieniowanie gradientowe, bardziej zaawansowane zarządzanie ścieżkami, wewnętrzne wsparcie dla współczesnych formatów graficznych typu JPEG i PNG oraz obsługę przekształcania afinicznego w potokowym przetwarzaniu widoku 2D. GDI+ używa wartości RGBA do odwzorowywania kolorów. Użytkowanie tych cech jest wyraźnie widoczne w komponentach Windows XP, takich jak Microsoft Paint, Podgląd obrazów i faksów systemu Windows, Kreator drukowania zdjęć oraz w wygaszaczu ekranu Moje obrazy. Ich obecność w podstawowej warstwie graficznej ogromnie upraszcza implementacje systemów grafiki wektorowej pokroju Adobe Flash czy SVG. Oprócz tego, .NET Framework oferuje zarządzany interfejs dla GDI+ poprzez przestrzeń nazw System.Drawing.
Podczas gdy GDI+ dołączane jest do Windows XP i nowszych, biblioteka GDI+ może być również dystrybuowana z oprogramowaniem i wykorzystywana w starszych wersjach systemu Windows[4].
Ze względu na dodatkowe możliwości przetwarzania tekstu i niezależności od rozdzielczości w GDI+, renderowanie tekstu jest realizowane przez procesor[5]. Rezultat jest o rząd wielkości wolniejszy niż przy zastosowaniu GDI z przyspieszeniem sprzętowym[6]. Chris Jackson opublikował wyniki niektórych testów wskazujących na to, że napisana przez niego porcja kodu do renderowania tekstu mogła wyrenderować 99 tysięcy glifów na sekundę w GDI oraz 16 600 glifów w ciągu sekundy w GDI+.
W swojej strukturze oraz celu GDI+ jest zbliżone do podsystemu QuickDraw GX opracowanego przez Apple oraz bibliotek open-source libart i Cairo.
Windows Vista
W systemie Windows Vista wszystkie aplikacje Windows, w tym GDI oraz GDI+, są uruchamiane w nowym silniku kompozycji – Desktop Window Manager (DWM) – który jest przyspieszany sprzętowo. W ten sposób GDI samo w sobie nie jest już przyspieszane sprzętowo[7][8]. Ze wzlędu na charakter operacji kompozycji, przesuwanie okien może być szybsze lub bardziej responsywne ponieważ program nie musi powtórnie renderować bazowej zawartości.
Windows 7
Windows 7 zawiera przyspieszenie sprzętowe GDI dla operacji blittingu w modelu sterownika Windows Display Driver Model w wersji 1.1. Powoduje to zwiększenie wydajności GDI i pozwala DWM do korzystania z lokalnej pamięci wideo w celach kompozycji, w ten sposób zmniejszając zmniejszenie zużycia pamięci systemowej oraz zwiększając wydajność operacji graficznych. Większość prymitywnych operacji GDI wciąż nie jest przyspieszana sprzętowo, w przeciwieństwie do Direct2D. GDI+ w Windows 7 wciąż polega na renderowaniu programowym[9].
Remove ads
Drukarki GDI
Podsumowanie
Perspektywa
Drukarka GDI (ang. GDI printer) lub „Windrukarka” (ang. Winprinter), analogicznie do Winmodemu – drukarka przeznaczona do przymowania danych wychodzących pochozących wyłącznie z komputera hosta z uruchomionym środowiskiem Windows. Komputer ten dokonuje wszystkie operacje dotyczące wydruku: GDI renderuje stronę jako bitmapę, którą procesor wydruku otrzymuje, przetwarza i wysyła do wyznaczonej drukarki[10][11]. Połączenie GDI i sterownika jest dwukierunkowe; otrzymuje ono informacje od drukarki np. o tym czy jest gotowa do pracy czy nie posiada papieru.
Drukarki nie polegające na GDI wymagają sprzętu, firmware oraz pamięci do renderowania stron, podczas gdy drukarka GDI wykorzystuje do tego celu komputer hosta. Jednakże drukarka z własnym językiem kontrolnym może przyjmować dane z dowolnego urządzenia posiadającego odpowiedni sterownik, podczas gdy drukarka GDI wymaga komputera z uruchomionym systemem Windows. Drukarki GDI mogą być dostępne dla komputerów w sieci gdy są podłączone jako udostępniane drukarki na włączonym komputerze z uruchomionym Windows. Istnieją pewne „rodzajowe” sterowniki drukarek GDI, takie jak pnm2ppa; ich celem jest uczynienie drukarek GDI kompatybilnymi z innymi systemami operacyjnymi, np. FreeBSD, ale nie obsługują wszystkich drukarek[10].
Aby ułatwić tworzenie sterowników dla Windrukarek, opracowano uniwersalny sterownik wydruku Microsoftu (ang. Microsoft Universal Printer Driver). Pozwala on producentom drukarek na pisanie „ministerowników” rodzajowego opisu drukarki (ang. Generic Printer Description, GPD), które opisują możliwości drukarki i zestaw poleceń zwykłym tekstem zamiast wymagać prac nad sterownikiem trybu jądra.
Microsoft wycofał się z tego modelu drukowania na rzecz Open XML Paper Specification.
Ograniczenia
Podsumowanie
Perspektywa
Każde okno „konsumuje” obiekty GDI. Wraz ze wzrostem złożoności okna, z każdym dodatkowym elementem typu przycisk czy obrazy, zwiększa się użycie obiektów GDI. W sytuacji gdy zbyt wiele obiektów GDI jest używanych Windows nie jest w stanie rysować nowych, co prowadzi do niewłaściwej pracy oprogramowania czy zawieszania się go[12]. Wiele programów jest niewłaściwie skompilowanych i nie uwalniają użytych wcześniej obiektów GDI, co tylko pogłębia istotę problemu[13]. Całkowita liczba dostępnych obiektów GDI jest różni się między poszczególnymi wersjami systemów Windows – rodzina Windows 9x miała limit wynoszący 1 200 obiektów; Windows 2000 posiada limit do 16 384 obiektów; Windows XP i nowsze mają konfigurowalny limit (poprzez Rejestr), domyślnie wynoszący 10 000 obiektów na każdy proces, z teoretycznym maksimum 65 536 obiektów dla całej sesji[14][15]. Windows 8 i późniejsze zwiększają limit obiektów GDI do 65 536 na każdą sesję użytkownika.
Wcześniejsze wydania Windows, takie jak Windows 3.1 i Windows 98 zawierały Miernik zasobów, pozwalający użytkownikowi na monitorowanie stopnia zużycia systemowych zasobów GDI. Program ten jednak sam również pobierał pewną ilość obiektów GDI. Późniejsze wydania Windows, takie jak Windows 2000 i Windows XP mogą przedstawiać liczbę używanych obiektów GDI przez każdą aplikację w Menedżerze zadań, ale nie mogą podać użytkownikowi wartości dostępnej puli.
Przepełnienie puli GDI może wpłynąć na sam system Windows, nie dopuszczając do tworzenia nowych okien, wyświetlania menu oraz okien komunikatów. Taka sytuacja może być trudna do opanowania i potencjalnie wymagać zresetowania komputera przez użytkownika z powodu poważnego ograniczenia działania kluczowych procesów systemowych. W systemach Windows 8 i Windows 8.1 przepełnienie puli obiektów GDI prowadzi do wymuszonego wylogowania użytkownika zamiast restartu.
Remove ads
Następca
Następcą GDI i GDI+ jest Direct2D. Pokrewna technologia, DirectWrite stanowi następcę wobec Uniscribe. Były dołączane do Windows 7 oraz Windows Server 2008 R2, a także dostępne dla Windows Vista i Windows Server 2008 (z zainstalowaną aktualizacją Platform Update). W późniejszym czasie Microsoft opracował Win2D, wolną i otwartą bibliotekę klasy zbliżoną do GDI. Docelowymi odbiorcami Win2D są twórcy oprogramowania korzystający z C++, C# oraz Visual Basic.NET do tworzenia aplikacji Universal Windows Platform[16].
Remove ads
Zobacz też
Przypisy
Linki zewnętrzne
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads