Gdy przychodzi wybierać nową kartę graficzną, decydującym czynnikiem jest jej wydajność w grach. Obsługiwane rozdzielczości, głębia kolorów, a nawet sposób programowania są w zasadzie identyczne niezależnie od producenta i modelu. Kiedyś było zupełnie inaczej: kolejne modele znacząco różniły się możliwościami oraz jakością wyświetlanego tekstu i grafiki. Poniższy artykuł przybliży Ci historię powstawania standardów graficznych komputerów klasy PC i pokaże, w jaki sposób znaleźliśmy się w punkcie, w którym jesteśmy dzisiaj.
Projektanci komputera IBM PC pewnie nie spodziewali się ani przez chwilę, jak popularna stanie się ich konstrukcja i jak długo w użyciu pozostaną prymitywne w zasadzie rozwiązania techniczne w niej zastosowane. Niezwykła elastyczność otwartej architektury PC, która dopiero niedawno zaczęła ulegać ograniczeniu przez tendencje do integrowania wszystkich elementów komputera na płycie głównej, zapewniła możliwość użycia komputera PC w każdym zastosowaniu – od przetwarzania tekstów, przez grafikę komputerową, aż po obliczenia inżynierskie.
Jednym z najodważniejszych kroków projektantów „peceta” była rezygnacja z terminalowego podejścia do obsługi ekranu, stosowanego dotychczas w „poważnych” komputerach biurowych. Pamięć obrazu, zamontowaną na wymiennej karcie rozszerzającej, uczyniono bezpośrednio dostępną dla mikroprocesora przez umieszczenie jej w jego przestrzeni adresowej. W ten sposób nie tylko umożliwiono użytkownikowi wybór rozwiązania o satysfakcjonujących go możliwościach graficznych (lub ograniczenie ceny komputera w przypadku mniejszych wymagań), lecz również zwiększono wielokrotnie możliwości oprogramowania, które zamiast nieintuicyjnego przetwarzania tekstu wiersz po wierszu dostało do dyspozycji całą powierzchnię ekranu wraz z możliwością błyskawicznego odczytywania i modyfikowania jego zawartości.
Zanim jeszcze IBM PC pojawił się w sklepach, we wnętrzach minikomputerów zatrudnionych do poważnych zadań królowało terminalowe podejście do obsługi ekranu. Sam komputer najczęściej pozbawiony był możliwości generowania tekstu i obrazu, dysponował za to sporą liczbą łącz szeregowych umożliwiających podłączenie osobnych urządzeń tekstowo-graficznych, tak zwanych terminali. Terminale odczytywały polecenia przesyłane z komputera, modyfikowały na ich podstawie wyświetlany obraz i przekazywały z powrotem kody naciskanych klawiszy.
Największą zaletą techniki terminalowej była prostota realizacji wielodostępu. Dokupienie kilku tanich terminali umożliwiało zwiększenie obciążenia centralnego minikomputera i bardziej efektywne wykorzystanie jego możliwości. Praca terminalowa mogła też być przerwana w dowolnym momencie i wznowiona później, gdyż terminal był tylko prostym sposobem uzyskania chwilowego dostępu do komputera.
Wraz z rozwojem tej techniki możliwości terminali zwiększały się. Najpierw pojawiły się atrybuty tekstu i możliwość dowolnego pozycjonowania kursora, co stworzyło możliwości tworzenia oprogramowania działającego w trybie pełnoekranowym. Najbardziej zaawansowane terminale obsługiwały również tryb graficzny, interpretując polecenia protokołu X Window. Jednak mimo oczywistych zalet (spośród których największą jest możliwość uzyskania dostępu do komputera z terminala położonego w dowolnym miejscu świata, za pośrednictwem globalnych łącz teleinformatycznych), terminalowa obsługa ekranu jest powolna i niepotrzebnie skomplikowana, co miało szczególne znaczenie gdy komputery i terminale nie były jeszcze tak szybkie, jak dzisiaj.
W tym samym czasie w ośmiobitowych domowych mikrokomputerach zamiast drogiej i skomplikowanej terminalowej obsługi ekranu stosowano tak zwany bufor ramki. Zasada działania bufora ramki jest prymitywnie prosta: na potrzeby opisu obrazu przeznacza się fragment pamięci operacyjnej regularnie odczytywany przez układ elektroniczny zamieniający cyfrowe informacje o obrazie na sygnał analogowy sterujący monitorem lub telewizorem (współcześnie taki układ nosi nazwę RAMDAC). Zaletą takiego rozwiązania jest prostota: by zmodyfikować obraz program musi po prostu zapisać właściwe liczby w odpowiednim miejscu pamięci. Istotną zaletą jest zmniejszenie kosztów, gdyż układ RAMDAC jest nieporównywalnie prostszy od terminala interpretującego skomplikowane nieraz polecenia. Dodatkowym plusem jest możliwość odczytywania zawartości ekranu, niedostępna w tradycyjnych terminalach.
W wielu komputerach, by przyspieszyć działanie i w efekcie zwiększyć komfort użytkowania, zmodyfikowano ideę bufora ramki wprowadzając dodatkowy tekstowy tryb pracy. W trybie tekstowym w wydzielonym na opis obrazu obszarze pamięci zapisuje się nie dokładny, cyfrowy opis każdego punktu (piksela), lecz tylko kody i atrybuty poszczególnych liter. Układ RAMDAC musiał ulec oczywiście skomplikowaniu – pojawił się nowy moduł dokonujący zamiany kodów znaków na sekwencje punktów o odpowiedniej barwie – jednak szybkość modyfikowania i przewijania ekranów pełnych tekstu ulegała zdecydowanej poprawie.
Właśnie taką mieszaną technikę tekstowo-graficznego bufora ramki postanowili wykorzystać inżynierowie z firmy IBM. Ich pracę dodatkowo ułatwiał fakt, że cała elektronika karty graficznej (wraz z pamięcią przechowującą opis obrazu) miała znajdować się na osobnej, wymiennej karcie, dzięki czemu pierwsze, prymitywne karty mogły zostać wymienione w przyszłości na bardziej zaawansowane technicznie, oferujące lepszą jakość obrazu i wyższą wydajność. Nie bez znaczenia była też olbrzymia jak na ówczesne czasy przestrzeń adresowa procesorów Intel 8086/8088, dzięki czemu bufor ramki (na który zarezerwowano w sumie 128 KiB przestrzeni adresowej!) nie ograniczał pojemności pamięci dostępnej dla programów użytkownika (co było poważnym problemem w przypadku mikrokomputerów ośmiobitowych).
Pierwszą kartą graficzną dla komputerów PC była MDA – Monochrome Display Adapter. W zamyśle miała być idealnym rozwiązaniem dla osób zajmujących się obróbką tekstu, bazami danych i obliczeniami, gdyż zapewniała bardzo wyraźny, monochromatyczny tekst. Brak możliwości graficznych przekreślił jednak jej szanse na akceptację wśród użytkowników i uczynił z niej raczej kartę testową, zaprojektowaną tylko po to, by widać było, że komputer faktycznie działa i produkowaną tylko do momentu opracowania lepszych, bardziej uniwersalnych rozwiązań.
Jedynym trybem, w którym działała karta MDA, był tryb tekstowy o kodzie 7 zapewniający 25 wierszy po 80 znaków tekstu. Każdy znak opisany był rastrem 9×14 pikseli i mógł być ukryty (ang. hidden), rozjaśniony (ang. bright), podkreślony (ang. underlined) lub wyświetlany w rewersie (ang. reverse video). Dodatkową funkcją było sprzętowe migotanie (ang. blinking) wskazanych znaków. Informacje o obrazie w tym trybie zajmowały dokładnie 4000 B (80×25 bajtów na znaki i drugie tyle na ich atrybuty), karta została zatem wyposażona w 4 KiB statycznej pamięci bufora ramki.
Karta MDA nie zdążyła na szczęście rozpowszechnić się zbytnio. W momencie, w którym komputery klasy IBM PC zaczęły być popularne na całym świecie, została zastąpiona kolejnymi, doskonalszymi rozwiązaniami.
Zgodnie z założeniami karta CGA – Color Graphics Adapter – miała być przeznaczona dla osób zajmujących się grafiką prezentacyjną (wykresy, schematy, diagramy) oraz projektowaniem wspomaganym komputerowo (CAD, CAE). Nie zdobyła ona jednak uznania wśród użytkowników korporacyjnych, stając się za to na jakiś czas standardem w komputerach kupowanych do domów, zapewniała bowiem możliwość stosowania kolorowego tekstu i grafiki (ta ostatnia była szczególnie przydatna w pierwszych grach pisanych na PC).
W trybie tekstowym karta CGA oferowała obraz wyświetlany w 25 wierszach po 40 lub 80 znaków. Oprócz wszystkich atrybutów „odziedziczonych” po MDA (poza podkreśleniem znaków) obsługiwała 8 kolorów tła i 16 kolorów znaków, po raz pierwszy wzbogacając możliwości biurowego komputera osobistego o prezentację barw. W trybach graficznych można było wyświetlać obraz o rozdzielczości 320×200 pikseli w czterech kolorach lub 640×200 pikseli w dwóch kolorach.
Największą wadą CGA, przekreślającą jej szanse na akceptację w biurach i wśród zaawansowanych użytkowników, była tragicznie niska jakość wyświetlanych znaków. Matryca opisująca znaki miała rozmiar tylko 8×8 pikseli, przez co wyświetlany tekst był kanciasty, nieczytelny i rozmyty. O ile na monitorze monochromatycznym nie wyglądało to jeszcze aż tak źle (choć traciło się w ten sposób możliwość prezentacji barw), monitor kolorowy dodatkowo pogarszał jakość obrazu „rozmywając” piksele. W grach to nie przeszkadzało, jednak dłuższa praca w edytorze tekstu czy arkuszu kalkulacyjnym musiała kończyć się bolesnym zmęczeniem oczu.
Ciekawą cechą karty CGA było narzucanie palety barw w trybie graficznym 320×200 pikseli. Do dyspozycji były dwa (a przy odrobinie kombinowania trzy) zestawy, z których każdy zawierał barwy zapewniające generowanej grafice zdecydowanie „oryginalny” wygląd:
Paleta 0: | tło | turkus | fiolet | jasny szary |
Paleta 1: | tło | zielony | czerwony | brązowy |
Paleta 2: | tło | turkus | czerwony | jasny szary |
We wszystkich trybach graficznych można też było zmienić kolor tła z czarnego na dowolny z 16 dostępnych, a w trybie „wysokiej rozdzielczości” 640×200 pikseli również kolor pierwszego planu z białego na dowolny. Trudno jednak nie zgodzić się, że możliwości graficzne karty CGA były wysoce niezadowalające zarówno pod względem rozdzielczości, jak i palety barw.
Na osłodę karta CGA kryła parę niespodzianek. Pierwszą z nich było 16 KiB dynamicznej pamięci obrazu, co umożliwiało przechowywanie 8 pełnych stron tekstu w trybie 40×25 znaków i 4 stron w trybie 80×25 znaków. Przełączanie między stronami następowało w sposób natychmiastowy, a programy mogły przygotowywać strony do wyświetlania w czasie, gdy były one jeszcze ukryte, zapisując dane w odpowiednie obszary pamięci operacyjnej.
Drugą był tryb semigraficzny 160×100 pikseli, uzyskiwany przez przeprogramowanie kontrolera obrazu w tryb tekstowy 80×100 znaków i wypełnienie całego obrazu tym samym symbolem dzielącym pole znakowe na połowy – jedna o barwie tła, a druga o barwie pierwszego planu. Kolejna rekonfiguracja kontrolera obrazu wyłączała atrybut migotania znaków, umożliwiając dostęp do wszystkich 16 barw jako kolorów tła. Od tego momentu samymi operacjami na atrybutach obrazu można było zmieniać barwy poszczególnych pseudo-pikseli, uzyskując obraz o bardzo niskiej rozdzielczości, wystarczający jednak do realizacji wielobarwnych plansz tytułowych lub wykresów i diagramów.
Karcie CGA, początkowo dosyć drogiej, a niewątpliwie pozbawionej większych możliwości, udało się jednak ustanowić pewnego rodzaju standard. Pojawiło się nawet kilka zgodnych z CGA kart niezależnych producentów, implementujących również tryby graficzne o wyższej liczbie barw. Szerokie rozpowszechnienie obsługi CGA w oprogramowaniu sprawiło, że każda późniejsza karta graficzna produkcji IBM potrafiła emulować jej działanie (dotyczy to również najnowszych kart Super VGA niezależnych producentów). Jednak kartą, która trwale odebrała prymat CGA i ustanowiła (szczególnie w Polsce) standard obowiązujący całe lata był produkt nie IBM, a niewielkiej firmy Hercules Computer Technology.
Brak możliwości graficznych karty MDA i żałosna jakość tekstu i grafiki w przypadku karty CGA umożliwiły w 1982 roku firmie Hercules Computer Technology rozpowszechnienie własnego rozwiązania. Karta HGC (ang. Hercules Graphics Card) łączyła zalety MDA i CGA (oprócz możliwości stosowania barw) likwidując zarazem ich wady.
Karta HGC (zwana najczęściej po prostu Herculesem) oferowała tylko jeden monochromatyczny tryb tekstowy 80×25 znaków (całkowicie zgodny z MDA) i jeden monochromatyczny tryb graficzny 720×348 pikseli (niezgodny z niczym). Ponieważ na płytce karty zainstalowana była pamięć o pojemności 64 KiB, możliwe było rysowanie obrazu tekstowego na 16, a graficznego na dwóch niezależnych, przełączanych sprzętowo stronach. Matryca znaków miała rozmiar 9×14 pikseli, zapewniając czytelność obrazu identyczną z MDA.
Problem niezgodności z CGA rozwiązano początkowo za pomocą programów emulujących CGA (najpopularniejszym był color.com
). Z braku kolorów wszystkie barwy były symulowane za pomocą technik rozpraszania (ang. dithering). Szybko rosnąca popularność Herculesa spowodowała jednak, że programiści chętnie dodawali do swoich programów obsługę tej karty, z czego największe zyski czerpali projektanci, zyskując czarno-biały co prawda, lecz pojemny i wyraźny pulpit graficzny znacznie przewyższający jakością osiągnięcia karty CGA.
W trybie tekstowym karta HGC używała zestawu znaków zapisanego w pamięci ROM (tak samo zresztą jak MDA i CGA), co zmuszało użytkowników posługujących się językiem innym niż angielski do przeprogramowywania generatora znaków. I na to znalazło się rozwiązanie: pakiet programowy GOP16H autorstwa Andrzeja Kadlofa symulował tryb tekstowy w trybie graficznym karty HGC, za cenę mniejszej wydajności dając możliwość w pełni programowej zamiany całego zestawu znaków (a nawet jednoczesnego używania dwóch niezależnych zestawów znaków).
Choć z czasem coraz silniej zintegrowane rozwiązania różnych producentów zgodne z HGC rozpowszechniały się i stawały się coraz tańsze (w skrajnej formie obsługą obrazu zajmował się jeden układ scalony), ogólny spadek cen elektroniki spowodował, że użytkownicy chętniej sięgali po nowsze karty, wyposażone w możliwość prezentacji barwnej. Producent Herculesa próbował jeszcze „reanimować” swój produkt rozszerzając go o możliwość definiowania zestawu znaków używanego w trybie tekstowym (HGC+, 1986 rok) i o kolorową grafikę (HICC, 1987 rok), nie mógł już jednak powstrzymać ofensywy doskonalszych produktów firmy IBM. Wraz z rozpowszechnieniem standardu VGA pamięć o Herculesie umarła.
Równolegle z premierą nowego, wydajnego modelu PC/AT, firma IBM postanowiła zaprezentować nowy moduł graficzny wykorzystujący moc obliczeniową komputerów AT i rozszerzający ich możliwości prezentacji danych. Karta EGA miała zastąpić zarówno MDA, jak i CGA.
Najważniejszą cechą nowej karty była dalece posunięta, choć nie idealna, zgodność z zastępowanymi standardami. Karta EGA obsługiwała zarówno tryb tekstowy MDA, jak i tryby tekstowe i graficzne CGA. W trybie tekstowym – nawet podczas emulacji karty CGA – zapewniała zawsze jakość obrazu dorównującą MDA (matryca znaków miała rozmiar 8×14 pikseli). Dodatkowy tryb tekstowy, przeznaczony dla osób pragnących zmieścić na jednym ekranie jak największą ilość informacji, kosztem zmniejszenia matrycy znaków do 8×8 pikseli (standardowa czcionka CGA) umożliwiał wyświetlanie 43 wierszy po 80 znaków.
Pierwsze modele karty wyposażone były w 64 KiB pamięci obrazu, co pozwalało na korzystanie – oprócz emulowanych trybów graficznych CGA – z 16-kolorowego trybu niskiej rozdzielczości (320×200 pikseli), 16-kolorowego trybu średniej rozdzielczości (640×200 pikseli) oraz monochromatycznego i czterokolorowego trybu wysokiej rozdzielczości (640×350 pikseli). Rozszerzenie pamięci do 128 KiB uaktywniało 16-kolorowy tryb wysokiej rozdzielczości, dzięki czemu przy pojemności obrazu niewiele ustępującej karcie Hercules na ekranie można było obserwować grafikę wykorzystującą jednocześnie szesnaście z 64 dostępnych barw. Pełna obsada pamięci (256 KiB) umożliwiała tylko wykorzystanie dwóch równoległych, przełączanych sprzętowo ekranów graficznych wysokiej rozdzielczości (co było przydatne podczas animacji).
Karta EGA była wyposażona w nieco tajemnicze gniazdo krawędziowe nazwane Feature Connector. Choć rzadko wykorzystywane, pozwalało ono na mieszanie obrazu z zewnętrznego źródła z obrazem wyświetlanym na ekranie komputera (aż po całkowite zastąpienie sygnału innym, na przykład pochodzącym z modułu rozbudowującego możliwości graficzne) i modyfikowanie parametrów obrazu (na przykład tworzenie nowych trybów tekstowych o wyższej rozdzielczości).
EGA była też pierwszą popularną kartą graficzną wyposażoną we własny moduł BIOS, uzupełniający i zastępujący procedury zapisane w BIOS płyty głównej. Dzięki temu możliwa była pełna obsługa aplikacji przystosowanych do grafiki CGA i udostępnianie w zestandaryzowany sposób nowych funkcji i trybów graficznych.
Karty zgodne z EGA produkowane przez niezależnych producentów, z modelu na model silniej zintegrowane i tańsze w produkcji, oferowały często dodatkowe możliwości, na przykład emulację karty HGC (z oczywistych względów funkcji tej nie miała oryginalna karta produkcji IBM) lub wyższe rozdzielczości graficzne i tekstowe. Nadejście ery VGA trzy lata później przypieczętowało jednak los EGA zanim jeszcze nastąpiła masowa rezygnacja ze standardu Hercules.
Sterownik MCGA nigdy nie był dostępny w formie osobnej karty rozszerzającej, a jedynie montowany w formie zintegrowanej z płytą główną (choć z własną, niezależną pamięcią graficzną o pojemności 64 KiB) w komputerach IBM PS/2, Model 25 i 30. W zamierzeniach miała zastąpić kartę CGA, dając jednocześnie możliwości graficzne potrzebne domowemu użytkownikowi zainteresowanemu grami komputerowymi i prostymi programami użytkowymi, a więc wielokolorową grafikę niskiej rozdzielczości i monochromatyczną grafikę wysokorozdzielczą.
Sterownik MCGA był zgodny z MDA i CGA na poziomie programowym. W trybach tekstowych zapewniał znacznie wyższą jakość obrazu (matryca znaku 9×16 pikseli), nie tylko nadrabiając wady CGA, ale też osiągając lepszą jakość niż MDA i EGA. Niestety, MCGA nie potrafiła emulować trybów graficznych EGA. Usprawiedliwiała to w pewnym zakresie obecność dwóch nowych trybów pracy, z których pierwszy – 320×200 pikseli w 256 kolorach wybranych z palety 262 144 barw – był wprost stworzony dla gier komputerowych i grafiki reklamowej, a drugi – monochromatyczny 640×480 pikseli – konkurował z kartą HGC, dając jednak obraz o znacznie przyjemniejszych proporcjach.
Podczas gdy MCGA było tylko przygrywką, prostym, silnie zintegrowanym układem przeznaczonym do tanich komputerów, silniejsze modele z rodziny PS/2 zostały wyposażone w układ graficzny nowej generacji, który – jak się okazało – wyznaczył standard obowiązujący do dziś.
Kontroler VGA, podobnie jak MCGA, wykorzystywał najnowsze zdobycze w zakresie programowanych matryc logicznych. Dzięki temu funkcjonalność olbrzymich kart rozszerzających zbudowanych w oparciu o uniwersalne kontrolery wizji udało się zmieścić w jednym układzie scalonym, wymagającym tylko kilku zewnętrznych elementów i łatwym w zintegrowaniu z płytami głównymi komputerów PS/2. Podobnie jak EGA, układ VGA wymagał własnej pamięci BIOS, zawierającej procedury obsługi wszystkich trybów graficznych.
Podstawowym zadaniem konstruktorów VGA było zapewnienie zgodności ze wszystkimi poprzednimi kartami graficznymi sprzedawanymi przez koncern. W efekcie układ VGA obsługiwał tryby tekstowe MDA (z lepszej jakości tekstem, matryca znaku miała rozmiar 9×16 pikseli), tekstowe i graficzne CGA (znów z tekstem o nieporównywalnie lepszej jakości), tekstowe i graficzne EGA (tekst jak wyżej) oraz własne dodatkowe tryby:
Podobnie jak EGA, sterownik VGA umożliwiał dowolne manipulowanie zestawami znaków używanymi w tekstowych trybach pracy. Dzięki temu można było dokonać wymiany zestawu znaków – czy to z powodów estetycznych, czy w celu zaprogramowania dodatkowych znaków alfabetów nieangielskich – w sposób czysto programowy, bez konieczności przeprogramowywania pamięci ROM generatora znaków czy uciekania się do sztuczek w stylu emulacji trybu tekstowego w trybie graficznym.
Stopień integracji sterownika VGA utrudniał jego klonowanie (producenci konkurencyjnych wersji musieli w zasadzie zaprojektować własne układy o analogicznej funkcjonalności), nie przeszkodziło to jednak w szybkim rozpowszechnieniu się VGA jako standardu. Zaczęły pojawiać się nawet karty o jeszcze lepszych parametrach, udostępniające szerszą paletę barw oraz wyższe rozdzielczości. Karty te nazywano wspólnym mianem Super VGA. Początkowo każda taka karta wymagała specyficznych programów obsługi, dostosowujących każdy program do swoich możliwości, szybko jednak okazało się, że znacznie lepszym rozwiązaniem jest zestandaryzowanie dodatkowych trybów graficznych. Uczyniono to w ramach organizacji VESA, a do obsługi ujednoliconych trybów graficznych wyznaczono moduł VESA BIOS (rozszerzający BIOS sterownika VGA), który mógł być instalowany w formie rezydentnego programu obsługi (dostosowując do standardu VESA nawet niektóre starsze karty graficzne) lub zintegrowany z BIOS samej karty graficznej.
Wraz ze wzrostem stopnia skomplikowania graficznych interfejsów użytkownika (GUI) oraz liczby punktów i kolorów wyświetlanych jednocześnie na ekranie stało się jasne, że idea bufora ramki nie zdaje egzaminu. Mimo stosowania coraz szybszych magistral pamięci graficznych odrysowywanie obrazu było zauważalnie powolne.
Naturalnym, narzucającym się rozwiązaniem było przeniesienie części odpowiedzialności za tworzenie obrazu z procesora centralnego (dotychczas samodzielnie zapisującego dane obrazu do pamięci graficznej) na układy zamontowane na płytce karty graficznej. Takie specjalizowane układy podlegające możliwości programowania dowolnych operacji graficznych nazwano koprocesorami graficznymi (ang. graphics co-processor), podczas gdy ich prostsze wersje z narzuconym zestawem operacji graficznych – akceleratorami grafiki (ang. graphics accelerators).
Możliwość programowania dowolnych funkcji graficznych była szczególnie nęcąca dla programistów pracujących nad pakietami graficznymi. Zamiast polegać na powolnym procesorze centralnym, mogli oni zaprogramować potrzebne funkcje (rysowanie krzywych, wypełnianie powierzchni, przemieszczanie bloków obrazu, zmianę jasności i kontrastu) bezpośrednio w układach karty graficznej i zlecać potem ich wykonywanie. Pozwalało to nie tylko przyspieszyć generowanie obrazu (koprocesor graficzny miał bezpośredni dostęp do pamięci obrazu, podczas gdy procesor centralny cały czas musiał korzystać z pośrednictwa magistrali rozszerzającej), ale też zwalniało CPU do wykonywania innych zadań w tym samym czasie. Podczas gdy koprocesor graficzny mozolił się z rysowaniem jednej skomplikowanej krzywej, procesor centralny mógł już przygotowywać parametry kolejnej. Takie zrównoleglanie przetwarzania pozwalało znów odczuć użytkownikom wydajność szybkich mikroprocesorów ich komputerów, mimo wzrostu poziomu skomplikowania oprogramowania.
Rynek IT nie lubi zbytniej jednorodności, nie jest zatem dziwne, że szybko pojawiło się kilka najważniejszych rodzin akceleratorów i koprocesorów graficznych, a inni producenci dostosowali swoje produkty tak, aby były zgodne albo sprzętowo (na poziomie rejestrów układu), albo programowo (na poziomie interfejsu sterownika pośredniczącego).
Standard Texas Instruments Graphics Architecture na krótką chwilę wprowadził porządek do świata koprocesorów graficznych. Pełna możliwość programowania operacji graficznych pozwalała idealnie dostosować wydajność karty do potrzeb używanego programu, jednak stopień skomplikowania programów obsługi ograniczał wykorzystanie koprocesora w oprogramowaniu użytkowym, zaś upowszechnienie się Microsoft Windows (i innych popularnych, uniwersalnych środowisk graficznych) dobiło standard TIGA.
Ciekawostką była silna „wirtualizacja” urządzeń TIGA. Generalnie mogły one mieć dowolną rozdzielczość i głębię kolorów, a oprogramowanie mogło odpytać kartę o możliwe tryby pracy i użyć dowolnego. Również sterowniki były zazwyczaj rozbite na dwa moduły, z których jeden dostarczany był przez producenta konkretnej karty i zajmował się tłumaczeniem standardowych odwołań TIGA w sposób zrozumiały dla zastosowanego procesora graficznego, a drugi za jego pośrednictwem nakazywał wykonywanie poleceń graficznych.
Cena kart TIGA nie przysporzyła im popularności, a rosnąca wydajność prostszych akceleratorów dopełniła dzieła.
Wprowadzony w 1987 roku równolegle z VGA i wykorzystujący możliwości magistrali MCA komputerów PS/2, ten akcelerator firmy IBM był chyba pierwszym udostępniającym stały zestaw przyspieszanych funkcji graficznych. Zawieszony sprzętowo gdzieś pomiędzy światem akceleratorów i koprocesorów, udostępniał wszystkie swoje funkcje za pośrednictwem modułu 8514/AI (ang. Application Interface), programującego kartę i wywołującego określone funkcje. Dzięki temu karty innych producentów mogły działać odmiennie, mimo to zachowując zgodność z oryginałem.
Karta 8514/A nie była samodzielną kartą graficzną. Łączona ze sterownikiem VGA za pośrednictwem odmiany złącza AVE, obsługiwała tylko własne tryby graficzne 640×480 i 1024×768 pikseli w 16 lub 256 kolorach (z czego tryb 1024×768 korzystał z przeplotu). Pozostałe tryby (z tekstowymi włącznie) pozostawały w gestii równolegle pracującego sterownika VGA.
Interfejs programowania karty 8514/A został stworzony z myślą o programach do tworzenia grafiki wektorowej i przystosowany był głównie do operacji rysowania odcinków i krzywych oraz zapełniania obszarów. Niezwykle przydatną funkcją był też akcelerator operacji bit-blit, polegającej na przeniesieniu bloku obrazu z jednego miejsca w drugie (wykorzystywane jest to szczególnie przy przemieszczaniu okien na ekranie).
Choć oryginalna karta 8514/A nie zdobyła większej popularności, wielu producentów podchwyciło pomysł i zaoferowało własne karty zgodne z 8514/A, nie wymagające jednak magistrali MCA, zgodne z VGA i starszymi rozwiązaniami i oferujące dodatkowe możliwości. Najpopularniejszymi producentami „klonów” 8514/A były firmy ATi (seria Mach), Chips and Technologies oraz Western Digital. Oferowanie przez nich rozwiązania często były lepsze od oryginału, wyświetlając obraz w maksymalnej rozdzielczości bez przeplotu, akcelerując rysowanie czcionek z wykorzystaniem techniki anti-aliasing (na przykład ATi Crystal Fonts) czy oferując szerszy wybór rozdzielczości obrazu.
Koncern IBM zdał sobie sprawę z egzotyczności 8514/A, niskiej jakości obrazu wyświetlanego z przeplotem i niezbyt konkurencyjnej wydajności. Krokiem naprzód miał być sterownik obrazu XGA, wprowadzony na rynek (oczywiście w wersji MCA) w 1990 roku.
XGA to już pełnoprawny, nowoczesny akcelerator graficzny. Zrezygnowano z pracy w tandemie z VGA, integrując sterownik VGA we wnętrzu układu. Wprowadzono rozdzielczość 800×600 pikseli z paletą 65 536 jednocześnie wyświetlanych barw (i pełną sprzętową akceleracją tego trybu) i utrzymano tryb 1024×768 pikseli w 256 kolorach, tym razem jednak bez wybierania międzyliniowego (przeplotu). Rozszerzono zakres akcelerowanych funkcji graficznych (między innymi o obsługę sprzętowego wskaźnika myszki), zachowując przy tym zgodność z interfejsem 8514/AI (a więc i oprogramowaniem napisanym z myślą o karcie 8514/A).
W kolejnym wcieleniu, XGA-2, jeszcze bardziej rozszerzono możliwości graficzne, wprowadzając tryby graficzne 640×480 pikseli z 24-bitowym opisem koloru (16 777 216 barw) i 1024×768 pikseli z 16-bitowym opisem koloru (65 536 barw), obydwa oczywiście w pełni akcelerowane. Również prędkość działania karty uległa zauważalnej poprawie.
Wymienione powyżej standardy koprocesorów i akceleratorów graficznych miały niesamowite możliwości, jednak słono się za nie płaciło. Tymczasem przeciętnemu użytkownikowi nie były potrzebne układy graficzne akcelerujące sprzętowo każdą funkcję, jaką można sobie wymyśleć, tylko tanie karty zapewniające odpowiednie parametry obrazu i sensowną szybkość jego generowania. Nastąpiło starcie dwóch światów: tak zwane „głupie bufory ramki” (ang. dumb frame buffers) musiały „nauczyć się” od akceleratorów graficznych paru sztuczek przyspieszających tworzenie obrazu, nie tracąc jednak przy okazji swojej podstawowej zalety, jaką była śmiesznie niska cena.
Badania wykazały, że wystarczy przyspieszyć tylko kilka podstawowych typów operacji graficznych, by uzyskać niesamowity, zauważalny gołym okiem przyrost wydajności. Operacje te, wykorzystywane szczególnie intensywnie w zunifikowanych środowiskach graficznych typu Microsoft Windows, to przede wszystkim:
Szybko zaczęły pojawiać się silnie zintegrowane (a więc tanie w produkcji) układy graficzne przyspieszające tylko tych kilka najprostszych operacji, pozostawiając rysowanie skomplikowanych wzorów geometrycznych, czcionek wektorowych i wypełnianie obszarów ograniczonych krzywymi procesorowi centralnemu. Pierwsze układy (takie jak S3 Vision) korzystały z drogiej, dwuportowej pamięci VRAM, lecz kolejne (na przykład S3 Trio) z taniej i powszechnie dostępnej DRAM lub EDO DRAM. Stopniowemu rozszerzaniu ulegał też wachlarz akcelerowanych funkcji (elektronika jest tania), a w szczególności możliwości nakładkowania i skalowania obrazu wideo. Dalsze ograniczenie kosztów przyniosło zintegrowanie odrębnego dotychczas układu RAMDAC z wnętrzem układu.
Rewolucja rozpoczęła się w 1996 roku, gdy firma 3Dfx Interactive zaprezentowała zestaw układów scalonych o wspólnej nazwie Voodoo, a firma Diamond Multimedia – zbudowaną na jego bazie kartę Diamond Monster. Ta dodatkowa karta rozszerzająca, przypominająca nieco 8514/A sposobem równoległej pracy z dowolną inną kartą zgodną z VGA (choć łączona z nią zwykłym, zewnętrznym przewodem sygnałowym) rozszerzała znacząco możliwości graficzne komputera o funkcje związane z rysowaniem pseudo-trójwymiarowego obrazu na płaszczyźnie monitora. Procesor centralny ograniczony został do roli źródła danych opisujących trójwymiarowy świat: wierzchołków trójkątów, tekstur pokrywających je i miejsc występowania efektów specjalnych w stylu mgły.
Choć firma 3Dfx osiadła na laurach i szybko przestała się liczyć w świecie grafiki komputerowej, jej osiągnięcia kontynuowali inni. Na prowadzenie szybko wysunęła się firma nVidia, której rodzina układów Riva TNT pokonywała kolejne granice wydajności graficznej, a rodzina GeForce wprowadzała nowe funkcje odciążające procesor centralny, jak na przykład blok transformacji obrazu i źródeł światła (ang. Transform and Lighting). Po okresie stagnacji na konkurenta wyrósł jej koncern ATi z rodziną układów Radeon, a w międzyczasie na arenie pojawiali się inni jeszcze zawodnicy (Matrox, Intel, S3) z własnymi, najczęściej mało konkurencyjnymi rozwiązaniami.
Wszystkie te wczesne układy wspomagające tworzenie grafiki pseudo-trójwymiarowej miały jedną wspólną cechę: brak możliwości programowania. Stały zestaw funkcji pozwalał co prawda tworzyć dowolnego typu scenerię, jednak oprogramowanie jakichkolwiek zmiennych efektów wpływających na kształt obrazu wymagał za każdym razem angażowania procesora centralnego i modyfikowania parametrów przesyłanego opisu sceny.
Dzisiejsze karty graficzne coraz bardziej przypominają zaawansowane koprocesory graficzne z możliwością programowania ich działania. Coraz mniejszą wagę przykłada się też do trybu tworzenia grafiki płaskiej, skupiając wszystkie wysiłki na jak najsprawniejszej obsłudze grafiki pseudo-trójwymiarowej.
Wbrew pozorom nie zyskują na tym tylko wielbiciele gier komputerowych. Nowoczesne interfejsy graficzne coraz częściej implementuje się w postaci zbioru prostokątnych obszarów odpowiadających oknom poszczególnych aplikacji, których zawartość wyświetlana jest jako tekstura. Również obraz wideo można w łatwy sposób wyświetlać, skalować i przekształcać traktując go jako teksturę wielokąta. Takie potraktowanie wciąż jeszcze płaskiego interfejsu użytkownika pozwala minimalnym nakładem pracy i bez angażowania procesora centralnego w dowolny sposób manipulować oknami, skalując je w czasie rzeczywistym, miotając nimi po ekranie i nakładając je na siebie z zachowaniem przezroczystości poszczególnych warstw i bez widocznego efektu odrysowywania odkrywanych obszarów ekranu.
Tym, co jednak naprawdę zmienia sposób tworzenia grafiki, są wprowadzane konsekwentnie możliwości programowania procesu zapełniania ekranu. Programy Pixel Shader i Vertex Shader umożliwiają przeniesienie na układ graficzny sporej części odpowiedzialności za wygląd brył i płaszczyzn. Zamiast podmieniania tekstur w celu uzyskania efektów specjalnych wystarczy uruchomić program shader dodający do dowolnej powierzchni efekt błysku, lustrzanego odbicia lub płomienia. Najważniejsze jest to, że takie programy wykonywane są w czasie rzeczywistym, podczas generowania sceny i nie wymagają czasochłonnego modyfikowania jej parametrów przed wyświetleniem każdej klatki.
Karty graficzne, których używamy dzisiaj, niczym nie przypominają skomplikowanych, lecz ubogich układów sprzed 20 lat. Dziś byle komputer przenośny dysponuje wyższą rozdzielczością i liczbą kolorów niż karty EGA czy MCGA, a szybkość tworzenia wysokorozdzielczych obrazów przewyższa osiągnięcia wielu akceleratorów graficznych sprzed lat. Musimy tylko wykorzystać te możliwości, przenosząc jak najszybciej obsługę graficznych interfejsów użytkownika na barki procesora graficznego, nakazując mu składanie przezroczystych okien z tekstur i żonglowanie nimi.
Pierwszy krok został wykonany. System Apple Mac OS X wykorzystuje możliwości programowania kart graficznych, używając procesora centralnego tylko w tak skrajnie skomplikowanych zadaniach jak rasteryzacja tekstu. Nieco mniejsze możliwości ma zapewniać Microsoft Windows Vista, oferując „tylko” sprzętowe wspomaganie składania obrazów okien (ang. compositing). Trwają też prace nad rozszerzeniem możliwości serwerów systemu X Window o składanie obrazów okien, a z wykorzystaniem biblioteki graficznej Cairo – również o sprzętowo akcelerowane rysowanie kształtów i czcionek. Wszystko po to, by skomplikowane, intuicyjnie zaprojektowane okna aplikacji rysowały się w mgnieniu oka, a obraz o wysokiej rozdzielczości jak najwierniej odwzorowywał wydruk.
Pozdrawiam ;)