OpenGL vs Direct3D – podstawy grafiki 3D, część 6

Należy pamiętać, że przedstawiony uprzednio model potoku graficznego jest abstrakcyjnym opisem sposobu działania jednostek przetwarzających grafikę, opartego na tradycyjnym podejściu. Każdego roku na rynku pojawia się nowy sprzęt, który chociaż zachowuje ogólną idee, dodaje nowe funkcje, rozszerza istniejące możliwości i wprowadza kolejne rozwiązania. Zdarza się, że karty rożnych producentów, wspomagają rożne funkcje, również, kolejne modele jednej firmy są na innym poziomie zaawansowania. Nie byłoby naturalnie możliwe, żeby każdy twórca oprogramowania, dostosowywał je do poszczególnych wersji sprzętu. Istnieje zatem bufor, w postaci interfejsu programistycznego i sterowników sprzętowych.

Najpopularniejszymi rozwiązaniami pozwalającymi na zunifikowany kontakt oprogramowania ze sprzętem, są Direct3D (link) oraz OpenGL (link). Pierwsze z nich jest częścią zestawu bibliotek DirectX firmy Microsoft, który należy pobrać z internetu (niemal zawsze jest też dostarczany z programem który go wykorzystuje) i zainstalować na komputerze. OpenGL korzysta z innego podejścia – nie istnieje jako niezależny program lub biblioteka, która można pobrać, ale polega na implementacjach producentów sprzętu, które dostarczane są razem ze sterownikami kart graficznych. Odmienność obydwu API nie wynika dziś z istotnych różnic w sferze ich możliwości technicznych – od początku istnienia obu, nowe możliwości pojawiające się w jednym ze standardów, były wkrótce implementowane w drugim – widać ja natomiast wyraźnie w kwestii dostępności i wykorzystania.

Przede wszystkim, Direct3D jest własnościowym rozwiązaniem i Microsoft dostarcza je tylko dla systemów z rodziny Windows (w tym Windows Mobile). Co więcej, najnowsze wersje DirectX 10 oraz 11 dostępne są jedynie dla Windows Vista oraz Windows 7 – podczas gdy jedynie ok. 50% użytkowników korzysta z tych dwóch systemów (reszta rynku wciąż należy do Windows XP) (link). Interfejs jest także wykorzystywany w konsolach spod znaku Xbox. OpenGL to API niezależne, nad którym opiekę sprawuje Khronos Group. Posiada implementacje na niemal każdą platformę sprzętową – nie tylko Windows, ale Mac OS i Unix/Linux również (zastosowania mobilne obsługiwane są przy pomocy OpenGL ES).

Od strony programistycznej, należy zwrócić uwagę na to, że DirectX jest kompletna biblioteka, przeznaczona przede wszystkim do tworzenia gier. Posiada mechanizmy obsługi dźwięku oraz urządzeń wejściowych. Jej architektura jest obiektowa. OpenGL jest natomiast API przystosowanym wyłącznie do generowania grafiki, a do obsługi pobocznych zadań dostępne są oddzielne biblioteki. Rozwiązanie Microsoftu miało w przeszłości dużo bardziej skomplikowana strukturę i postrzegane było jako znacznie trudniejsze do nauczenia się. Szerokim echem odbił się szczególnie list otwarty Johna Carmacka, prekursora i twórcy gier z serii Doom oraz Quake (link), w którym wytykał on wady Direct3D i nie szczędził pochwal dla OpenGL – wyrażając prawdopodobnie zdanie wielu programistów 3D.

W ciągu paręnastu lat od czasu kiedy list ten został opublikowany, oba interfejsy ewoluowały, wraz z rozwojem możliwości sprzętowych komputerów osobistych. Współczesny rynek komputerowej rozrywki jest zdominowany przez programy korzystające z DirectX (link), natomiast OpenGL jest wykorzystywany głownie w profesjonalnych aplikacjach do tworzenia trójwymiarowej grafiki (link). Zdążają się też gry korzystające z tego API, natywnie lub konwersjach z Windows na inne platformy. OpenGL jest niezastąpiony, jeśli program wydawany jest na rożne platformy (w tym również mobilne). Pomijając wszelkie „święte wojny” (link) oraz doniesienia o nieczystych praktykach Microsoftu w celu zdeklasowania konkurenta (link), OpenGL idealnym rozwiązaniem do zastosowań internetowych, opisywanych w tej pracy.

Komentowanie nieaktywne.