Nowy API - czy warto było czekać?

OpenGL wyraźnie przegrywał w ostatnich latach z DirectX - przyjrzyjmy się, czy najnowsza wersja ma szansę odwrócić ten niekorzystny trend.

OpenGL wyraźnie przegrywał w ostatnich latach z DirectX - przyjrzyjmy się, czy najnowsza wersja ma szansę odwrócić ten niekorzystny trend.

Grupa Khronos, odpowiedzialna za rozwój OpenGL opublikowała 11 sierpnia br. ostateczną wersję specyfikacji interfejsu oznaczonego numerem 3.0. OpenGL to wieloplatformowy API pozwalający na obsługę grafiki trójwymiarowej 3D i wykorzystywany głównie w oprogramowaniu typu CAD oraz grach komputerowych. OpenGL 3.0 ma stanowić alternatywę dla modułu Direct3D w DirectX 10. Wydany został jednak prawie dwa lata po ostatnim API Microsoftu. Przyjrzyjmy się bliżej zmianom i nowościom w kolejnej odsłonie otwartego standardu OpenGL i zobaczmy, czy rzeczywiście warto było tak długo czekać na nowe biblioteki.

Co to jest API?

API (Application Programming Interface) to interfejs programowania aplikacji. Jest to zestaw specyfikacji procedur i funkcji, który umożliwia oprogramowaniu komunikację z systemem lub biblioteką. Ujednolicony zestaw API umożliwia łatwiejsze tworzenie aplikacji oraz gwarantuje podobny interfejs w oprogramowaniu opartym o dany standard.

Słów kilka o OpenGL

OpenGL (Open Graphics Library) jest specyfikacją uniwersalnego API do generowania grafiki, służącą deweloperom do tworzenia aplikacji graficznych dla środowisk Windows, Linux oraz Mac OS. Po raz pierwszy OpenGL zadebiutował w 1992 roku. Od tego czasu jest cały czas rozwijany, stanowiąc wolną alternatywę dla bibliotek DirectX Microsoftu. Od 2006 roku rozwojem API zajmuje się Grupa Khronos. Wydanie OpenGL 3.0 planowane było początkowo w zeszłym roku, jednak ciągłe prace i modyfikacje standardu spowodowały ponadroczne opóźnienie premiery. Według szacunków, około 60 milionów komputerów dysponuje dziś wsparciem dla OpenGL 3.0.

Historia OpenGL w skrócie

1992 r. - Silicon Graphics (SGI) postanawia stworzyć specyfikację OpenGL.

1994 r. - SGI wychodzi z inicjatywą udostępnienia OpenGL++.

1995 r. - Microsoft udostępnia DirectX, głównego konkurenta OpenGL.

17 grudnia 1997 r. - SGI i Microsoft inicjują wspólnie projekt Fahrenheit, który w założeniu ma umożliwić unifikację interfejsów OpenGL oraz DirectX.

Wrzesień 2004 r. - Udostępniono finalną specyfikacje standardu OpenGL 2.0 wraz z GLSL.

2 sierpnia 2006 r. - Premiera OpenGL 2.1.

11 sierpnia 2008 r. - Wydano ostateczną wersję OpenGL 3.0.

Wśród nowości wprowadzonych w OpenGL 3.0 znalazło się kilka rozszerzeń mogących potencjalnie zwiększyć możliwości następnej edycji bibliotek. Oprócz tego API pozwala na obsługę GLSL (OpenGL Shading Language) 1.30, nowej wersji języka cieniowania, oraz oferuje wszechstronne wsparcie dla funkcji oferowanych przez akceleratory graficzne ostatniej generacji. Poza tym warto wymienić:

  • Zaimplementowanie obiektów tablicy wierzchołków (Vertex Array)
  • Funkcję kompaktowania danych pikseli i werteksów w celu oszczędzania pamięci i pasma
  • Nieblokowalny dostęp do obiektów bufora werteksów
  • Cztery nowe schematy kompresji tekstur
  • Funkcję renderowania warunkowego, która zwiększa wydajność
  • Wsparcie dla 32-bitowego bufora głębokości (floating-point depth buffer) nazywanego buforem współrzędnej Z.

Pełną specyfikację OpenGL 3.0 liczącą ponad 500 stron w postaci dokumentu PDF można pobrać z witryny Khronos Group, udając się pod adres: http://www.opengl.org/registry/doc/glspec30.20080811.pdf

Wymienione powyżej i jeszcze inne nowości pozwalają programistom przygotowywać jeszcze bardziej złożone aplikacje niż dotychczas. Gdy przyjrzeć się jednak OpenGL 3.0 i porównać go z DirectX 10, to nowe biblioteki wypadają dosyć słabo w świetle możliwości wykorzystywania ich jako platformy do tworzenia gier. Tuż po premierze specyfikacji interfejsu wielu deweloperów otwarcie wyraziło swoje zdanie na temat nowej odsłony OpenGL, krytykując brak wielu wyczekiwanych funkcji zaimplementowanych już przez Microsoft w DirectX 10, a obiecanych przez twórców API. Co ciekawe, aby wykorzystać wszystkie możliwości OpenGL 3.0, należy posiadać kartę zgodną z… DirectX 10 właśnie. Niestety, nie zmienia to faktu, że w ten sposób nie można zaimplementować wszystkich funkcji zaszytych w bibliotekach Microsoftu. Wśród wielu ocen ze strony deweloperów znalazły się też dość radykalne, że nowy OpenGL jest opóźniony o siedem lat wobec DirectX, a przepaść ta ma się pogłębiać, gdyż Microsoft w czerwcu br. zapowiedział już kolejną odsłonę własnego API - DirectX 11.

OpenGL, a gry komputerowe

OpenGL jest stosunkowo rzadko wykorzystywany w grach komputerowych, jeśli porównać liczbę tytułów opracowywanych przez deweloperów na bazie DirectX, mimo iż standard jest obsługiwany przez znaczną liczbę urządzeń dostępnych na rynku. Do rozwoju bibliotek przyczyniły się takie firmy jak Intel, AMD czy Nvidia, wszystkie trzy też otwarcie mówią, że ich zamiarem wprowadzenie obsługi OpenGL 3.0 we wszystkich możliwych produktach. Nie zmienia to faktu, iż poza obietnicami użytkownicy na razie nie otrzymali nic więcej. Szybkość przetwarzania grafiki opartej na OpenGL w chipach Intela oraz ATI (należącego do AMD) jest niewystarczająca, gdy porównamy proces z DirectX Microsoftu. Zaraz po premierze nowej odsłony wolnego API jedynie NVidia zapewniła pewne wsparcie dla własnych produktów udostępniając sterowniki w wersji beta dla systemów Windows XP oraz Windows Vista. Aby móc skorzystać z dobrodziejstw OpenGL 3.0, poza driverami, o których mowa wyżej, posiadać należy jedną z kart graficznych z rodziny GeForce 8000 lub wyższej (wykaz wszystkich obsługiwanych modeli jest w ramce). Do tego należy jeszcze pobrać program nvemulate, dostępny pod adresem http://developer.nvidia.com/object/nvemulate.html gdyż sterowniki nie oferują automatycznego wsparcia dla OpenGL 3.0 oraz funkcji cieniowania GLSL 1.3, a należy je aktywować przy użyciu wspomnianej aplikacji. Nie zmienia to faktu, że drivery w wersji beta od NVidii także pozostawiają wiele do życzenia, powodując problemy ze stabilnością systemu operacyjnego.

Karty graficzne NVidii zgodne z OpenGL 3.0

Modele desktop: rodzina GeForce 8000, GeForce 9000, GeForce GTX200 oraz Quadro FX 370, 570, 1700, 3700, 4600, 4700×2, 5600

Modele dla laptopów: rodzina GeForce 8000M oraz karty z serii Quadro FX 360M, 370M, 570M, 770M, 1600M, 1700M, 2700M, 3600M, 3700M


Zobacz również