Podczas ubiegłorocznej konferencji SIGGRAPH, grupa Khronos ogłosiła specyfikację interfejsu programowania OpenGL 4.3. Teraz wraz z konferencją SIGGRAPH 2013 nadeszła pora na API OpenGL 4.4, które wprowadza kilka istotnych zmian i jest swoistym przetarciem przed wersją 5.0.
Interfejs OpenGL przeznaczony dla stacji roboczych i komputerów osobistych po raz pierwszy ujrzał światło dzienne 21 lat temu, do dzisiaj interfejs jest intensywnie rozwijany i co ważne w pełni darmowy oraz wieloplatformowy, a ostatnio zaczyna przeżywać swój renesans. Niewątpliwą zaletą OpenGL jest wsteczna kompatybilność i niezależność od systemu operacyjnego, a to oznacza, że najnowszą wersję tego API bez problemu da się uruchomić zarówno na starym Windows XP, jak i nowoczesnym Windows 8.1, a także Linuksie, czy też Mac OS X i to nawet na starszego typu układzie graficznym.
Grupa Khronos, zajmująca się rozwojem OpenGL, zrzesza w swoich szeregach wiele ważnych w branży IT firm, ogłosiła oficjalną specyfikację OpenGL 4.4. Wśród nowości należy wymienić wprowadzenie rozszerzenia ARB_buffer_storage, które odpowiada za utworzenie bezpośredniego bufora dla układów APU, SoC, GPU/CPU i innych procesorów zintegrowanych.
Bufor pozwala programistom kontrolować, gdzie będą przechowywane obiekty – czy zostaną zapisane w pamięci systemowej RAM, czy też trafią do bufora i znajdą się w pamięci VRAM karty graficznej. Podobne rozwiązanie zapowiedział Microsoft w przypadku interfejsu DirectX 11.2, który w odróżnieniu od OpenGL będzie działał jedynie w Xbox One i Windows 8.1.
Kolejną ważną nowością jest ARB_enhanced_layouts (GLSL). Rozszerzenie jak wskazuje nazwa, jest odpowiedzialne za optymalizację układu jednostek cieniowania. Obejmuje to nowe sposoby „pakowania” danych skalarnych obok wektorów, dając programistom większą kontrolę nad zmiennymi wewnątrz i nad blokami pamięci.
Ciekawymi rozszerzeniami są również ARB_sparse_texture oraz ARB_bindless_texture. Pierwsze z nich doskonale sprawdzi się w przypadku pracy teksturami w dużej rozdzielczości tzw. megatekstury. W praktyce oznacza to możliwość ładowania do pamięci tylko części tekstury, a przy jej generowaniu przepuszczeniu jej jakby przez translator, który wykorzystując stworzoną mini mapę, odtworzy resztę tekstury i to w ogromnej rozdzielczości – bez obciążania pamięci VRAM.
Druga wspomniane odpowiada za eliminację luk i ograniczeń nałożonych odgórnie. Od teraz kod będzie mógł już bezpośrednio linkować do konkretnych tekstur na scenie, a ich liczba nie będzie sztucznie ograniczona. To rozwiązanie pozwoli wprowadzić do renderowanej sceny zarówno więcej tekstur, jak i więcej innych elementów, dodatkowo jak podaje Khronos, pozwoli to podnieść wydajność w specyficznych warunkach nawet o 10 razy.
Z pozostałych równie ważnych nowości można również wymienić GL_ARB_query_buffer_object odpowiedzialną za bezpośrednie buforowanie ważnych obiektów, celem uniknięcia sytuacji, w której CPU czeka na wynik i przez to powstaje opóźnienie w dostarczaniu informacji do GPU.
Kolejnym ciekawym rozszerzeniem jest GL_ARB_multi_bind, które odpowiada za umożliwienie masowego „wiązania” lub „rozwiązania” zestawu obiektów z jednego API, zamiast stosowania oddzielnych poleceń dla każdej operacji wiązania. Funkcja może znacząco zmniejszyć odciążenie procesora i zwiększyć wydajność uruchamianej aplikacji.
Dodatkowo pojawiły się także liczne usprawnienia i nowe rozszerzenia umożliwiające łatwiejsze portowanie z interfejsu Direct3D właśnie do OpenGL.
To oczywiście nie wszystkie nowości, jakie pojawiły się w interfejsie OpenGL 4.4. Pełną listę zmian można znaleźć na stronach konsorcjum Khronos Group. Warto dodać, że duży wpływ na rozwój API miały firmy AMD i NVIDIA – co zresztą nie jest zaskoczeniem, gdyż obie należą do wspomnianego konsorcjum, które niebawem powinny wprowadzić obsługę interfejsu do swoich stabilnych wersji sterowników graficznych Catalyst i ForceWare dla Windows i Linuksa. Obecnie NVIDIA udostępniła wczesną wersję deweloperską swoich sterowników z obsługę wspomnianego API.
Źródło: Khronos Group. AnandTech, Phoronix