DirectX dla opornych

MBI
2006/05/25 16:00

Od podstaw do WGF i z powrotem

Od podstaw do WGF i z powrotem

Raz na jakiś czas, każdego przeciętnego użytkownika komputera pracującego na systemie Windows, czeka niewątpliwa „przyjemność” reinstalowania Okien. Zaraz po zakończeniu wgrywania świeżego systemu, pozostaje jeszcze tylko instalacja najnowszych sterowników, łatek, kodeków, programów i całej sterty rzeczy zajmujących z roku na rok coraz więcej miejsca na twardym dysku. DirectX 9.0c już na dobre zagościł na tej liście.

Tytułem wstępu i na skróty... W telegraficznym skrócie: jest on zestawem bibliotek, wspomagających twororzenie grafiki i dźwięku, oraz rozszerzających możliwości systemu Windows w dziedzinie multimediów. Dzięki nim oprogramowanie, a najczęściej gry, mogą komunikować się ze sprzętem, wykonując przy tym minimalną liczbę instrukcji. Jak informuje nas Microsoft, twórca DirectX, jest to technologia umożliwiająca osiągnięcie większej wydajności podczas grania i odtwarzania wideo na naszym PC. Daje ona programistom narzędzie pozwalające na bezpośredni dostęp do szerokiej gamy urządzeń zewnętrznych. Dziś ciężko znaleźć grę, która nie wymaga DirectX. Niestety, jak to bywa z produktami Microsoftu, i ten nie jest doskonały. Powolność w działaniu oraz fakt, że jest on dostępny tylko na platformie Windows i konsoli X-box, to jego dwie główne wady.

Nie tylko dla graczy... Od podstaw do WGF i z powrotem, DirectX dla opornych

Istnieją dwie części DirectX. Pierwsza z nich jest potrzebna, aby aplikacje „chodziły” na naszych komputerach, zgodnie z zamierzeniami ich twórców. Pojawiła się ona wraz z późniejszymi wersjami Windows 95 i ewoluowała do wspomnianego DirectX 9.0c. Druga część to SDK (Software Development Kit) – zbiór bibliotek, podręczników i narzędzi do tworzenia oprogramowania bazującego na DirectX. Używa się go między innymi przy produkcji gier i aplikacji obfitujących w realistyczne trójwymiarowe animacje oraz przestrzenny dźwięk. Technologia ta obejmuje strumieniową transmisję danych, usprawniając oglądanie i pobieranie z Internetu plików audio i wideo w czasie rzeczywistym.

Jak już wcześniej wspomninaliśmy, DirectX jest narzędziem dla programistów (API – interfejs programowania aplikacji), platformą składającą się z dynamicznych bibliotek DLL oraz sterowników VXD. Posiada wbudowany mechanizm, dzięki któremu mogą one bezpośrednio obsługiwać różne komponenty sprzętowe. Pozwala to tym samym pomijać pracochłonne pisanie driverów do niezliczonej ilości kart graficznych, dźwiękowych, klawiatur, joysticków itp. Zadanie komunikacji ze sprzętem przejmują od aplikacji odpowiednie moduły DirectX, a niektóre funkcje, po przekazaniu bezpośrednio do urządzeń, wykonywane są sprzętowo przez procesor zamontowany na karcie. Dobrym przykładem są tu jednostki cieniowania (pixel shader, vertex shader) na akceleratorach 3D. Aplikacje korzystające z DirectX mogą być pisane w popularnych językach programowania takich jak C++ czy Java.

Części składowe... W skład technologii DirectX wchodzi szereg komponentów będących odpowiedzialnymi za realizację poszczególnych funkcji aplikacji. Najważniejsze z nich to:

  • DirectX Graphic składający się z dwóch części:
    Direct Draw – obsługa grafiki rastrowej (dwuwymiarowej)
    Direct3D – obsługa grafiki 3D
  • DirectSound – obsługa efektów dźwiękowych (koordynacja grafiki i dźwięku)
  • DirectMusic – obsługa muzyki
  • DirectInput – obsługa urządzeń wejściowych jak mysz, klawiatura czy joystick
  • DirectPlay – obsługa funkcji sieciowych często wykorzystywana w grach sieciowych
  • DirectShow – obsługa odtwarzania plików audio i wideo

GramTV przedstawia:

Ze wszystkich cegiełek tworzących DirectX zatrzymamy się na chwilę przy Direct3D, odpowiedzialnym za wyświetlanie grafiki trójwymiarowej na PC z systemem Windows. Inne platformy korzystają z biblioteki sterowników firmy Silicon Graphic – OpenGL. Spełniają one tą samą funkcję co Direct3D. W D3D programista musiał korzystać z interfejsów COM, na których oparty jest cały DirectX. Aby nie tłumaczyć dokładnie czym jest COM wystarczy nadmienić, że interfejsy te mają więcej wad niż zalet, zwiększają m.in. nieczytelność kodu. Na szczęście Microsoft odchodzi powoli od tego modelu, przyjmując rozwiązania zawarte w OpenGL. Z biegiem czasu budowa Direct3D coraz bardziej zaczyna przypominać tę, znaną z programu firmy Silicon Graphic.

Co nam Microsoft zafunduje...

Od jakiegoś czasu czekamy na pojawienie się Windows Vista. Przekładana już kilkakrotnie premiera, zapowiadana jest aktualnie na początek 2007 roku. W tym samym czasie światło dzienne ujrzy DirectX 10. Microsoft jakiś czas temu, zapowiadał zmianę nazwy DX na WGF (Windows Graphic Foundation). Jednakże, prawdopodobnie ze względów marketingowych, zdecydowano się na pozostawienie jej bez zmian.

Nowy DirectX ma wnieść rewolucyjne zmiany, i według zapowiedzi, być sporym krokiem w dziedzinie grafiki. Choć wszyscy wiemy jak to z tymi zapowiedziami bywa. Nowe biblioteki DLL będą obsługiwane przez API, całkowicie odświeżone oraz okrojone z przestarzałych i zbędnych funkcji. Dzięki temu ma się znacznie zwiększyć ich szybkość oraz przejrzystość kodu. Niestety zaowocuje to brakiem kompatybilności z poprzednimi DirectX. Oczywiście Microsoft zapowiada wsparcie starszych wersji emulacją programową. Będzie to wiązało się jednak z dużym spadkiem wydajności.

Warto również wspomnieć o nowych funkcjach, takich jak na przykład „geometry shader”. Jest to jednostka odpowiedzialna za przetwarzanie całych polygonów (prymitywnych obiektów, takich jak punkty, linie i trójkąty). Kolejnymi innowacjami ma być ulepszenie maskowania dla antylasingu oraz nowy zestaw funkcji Shader Model 4.0. W rezultacie powinno to zaowocować grafiką o niespotykanym realizmie. Jak będzie naprawdę i czy konsole zostaną w tyle, jak zapowiada Microsoft, zobaczymy za jakiś rok.

Słowniczek API (Application Programming Interface) – Interfejs programowania aplikacji. Zbiór zasad, protokołów i narzędzi służących do tworzenia oprogramowania, wykorzystywania różnych funkcji systemu i uzyskiwania od niego informacji. Dzięki niemu proces tworzenia nowych aplikacji może zostać znacznie przyśpieszony. DLL (Dynamic link library) – Biblioteka łączona dynamicznie. W bibliotece dołączanej dynamicznie zapisane są dane, które mogą być używane przez wiele programów jednocześnie. Można je ładować gdy są potrzebne, a następnie usuwać z pamięci operacyjnej w dowolnym momencie. Niezależnie od ilości programów korzystających z tych bibliotek wczytywane są tylko raz. Aplikacje łatwo wzbogacić o nowe biblioteki dołączane dynamicznie i modyfikować już istniejące. OpenGL (Open Graphics Library) – Otwarta biblioteka grafik. API, przeznaczona jest do tworzenia komputerowej grafiki 3D. OpenGL wykorzystywany jest często przez gry komputerowe, spełnia rolę analogiczną jak konkurencyjny Direct3D.

Komentarze
36
Usunięty
Usunięty
27/05/2006 15:48

Ale ogolnie artykol jest spox :)

Usunięty
Usunięty
26/05/2006 16:39

...od autora trochę odpowiedzi ...."hehehehehe, szczerze widac odrazu stronniczosc osoby piszacej tej artykul, ......., bo jesli porownyjemy cos z OpenGL to napeno nie DirectX tylko Direct3D, ............,. Natomiast OpenGL coraz wolniej sie rozwija, gdy wychodzi nowa karta kazdy, ......... , rozszerzenia. Natomiast wracajac co do czytelnosci kodu, ani w jednej ani w drugiej bibliotece nie widze tego problemy"Po pierwsze nie porównuje DX do OpenGL, tylko D3D opartego na COM używanego w całym DX.Po drugie – komplikacja kodu – w COM programista musi tworzyć odnośniki do klas a potem z nich korzystać ... i dla mnie osobiście coś co w innym rozwiązaniu można otrzymać robiąc po drodze mniej czynności, zawsze będzie uproszczeniem lub komplikacją tego pierwszego.Po trzecie – nie pisałem o „wolnym rozwijaniu się OGL” itp. bo to był artykuł o DX. OPG znalazł się w nim w celu porównania COM i rozwiązań z OPG. W związku z tym nie oznacza to, iż jestem stronniczym zwolennikiem OPG, bo nie napisałem o jego słabych stronach.Uściślając – artykuły piszę z punktu widzenia dość wymagającego użytkownika, a jeżeli dobrze/źle mówię o jakiejś technologii/firmie to znaczy, że mam ku temu powody poparte faktami. Oczywiście każdy ma prawo mieć inne zdanie tak jak mój osąd jest subiektywny, ale akurat stronniczy nie jestem." DirectDraw od wersji DirectX 8.0 praktycznie nie istnieje. jego funkcjonalność przejął w całości Direct3D"Moje niedopatrzenie. Twoje zdanie Penny, powinno być w artykule tuż po wymienieniu części składowych DX.

Usunięty
Usunięty
26/05/2006 16:30

Kiedys chcialem cos napisac w czystym API, to mozna sie zajechac, bo trzeba o wszystko dbac samemu. Samemu robic petle sterujaca (czy jak to sie zwie), samemu dbac o odpowiednie przesylanie komunikatow i wylapywanie ich. Natomiast jak piszemy cos w .NET, to nie ma takiego problemu.




Trwa Wczytywanie