OpenGL 4.4: specyfikacja nowej wersji interfejsu programowania Khronos Group
Grupa Khronos opublikowała specyfikację interfejsu programowania OpenGL 4.4. Nowość przynosi kilka przydatnych rozszerzeń.
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
Komentarze
21Megatekstura, to nie tekstura astronomicznej rozdziellczości, tylko macierz tekstur i nie ma żadnego translatora, tylko transkodowanie. Po transkodowaniu nie są tworzone żadne tekstury ogromenej rozdzielczości, tylko jedna w granicach 4k - 16k, tak aby nie marnować zasobów na rozdzielczości znacznie powyżej 1:1 - stosunku piksela tekstury do piksela ekranu.
W prezentacji MS była to 'megatekstura' transkodowana do 8k, jak ewitentnie sugeruje ilość wymaganego VRAM.
Jednak jeśli chodzi o same zmiany "core" to zdecydowanie nie są tak interesujące jak zmiany przykładowo w nowej wersji OpenCL czyli 2.0.
Jest to kłamstwo. Osx "trzyma poziom" i nie ma pełnego wsparcia nawet OGL 3.2. 4.x w ogóle nie ma.