W GTK dodano nowe silniki renderujące dla OpenGL i Vulkan

Twórcy biblioteki GTK ogłosili gotowość dwóch nowych silników graficznych — „ngl” i „vulkan”, które wykorzystują API graficzne OpenGL (GL 3.3+ i GLES 3.0+) oraz Vulkan. Nowe silniki są zawarte w eksperymentalnej wersji GTK 4.13.6. W eksperymentalnej gałęzi GTK silnik ngl jest teraz używany domyślnie, ale w przypadku wystąpienia istotnych problemów w następnej stabilnej wersji 4.14 zostanie przywrócony stary silnik graficzny „gl”.

Nowe silniki są pozycjonowane jako zjednoczone i stworzone z jednej bazy kodowej. Istota unifikacji polega na tym, że jako baza wykorzystywane jest API Vulkan, nad którym dla OpenGL stworzono oddzielny poziom abstrakcji, uwzględniający różnice między OpenGL a Vulkan. Tego rodzaju podejście pozwoliło wykorzystać w obu silnikach wspólną infrastrukturę do przetwarzania grafu sceny, transformacji, buforowania tekstur i glifów. Unifikacja również znacznie uprościła utrzymanie bazy kodowej obu silników i ich aktualizowanie w synchronizowanym stanie.

W przeciwieństwie do starego silnika „gl”, w którym dla każdego typu węzła renderowania (rendernode) używano oddzielnego prostego shadera, a dane były okresowo przetwarzane przy renderowaniu offscreen, nowe silniki stosują złożony shader (ubershader), który interpretuje dane z bufora zamiast renderowania offscreen. W obecnej formie nowa implementacja wciąż pozostaje w tyle za starą pod względem optymalizacji, ponieważ główny nacisk na tym etapie kładzie się na poprawność działania i łatwość konserwacji.

Nowe funkcje, które nie występują w starym silniku „gl”:

  • Wygładzanie krawędzi — pozwala zachować drobne detale i uzyskać gładsze kontury.
    W GTK dodano nowe silniki renderujące dla OpenGL i Vulkan
  • Tworzenie dowolnych gradientów, w których można używać dowolnej liczby kolorów i wygładzania (w silniku „gl” obsługiwano tylko gradienty liniowe, radialne i stożkowe z 6 kolorami przystankowymi).
    W GTK dodano nowe silniki renderujące dla OpenGL i Vulkan
  • Ułamkowe skalowanie (fractional scale), które umożliwia ustawianie niecałkowitych wartości skali, na przykład przy użyciu skali 125% dla okna 1200×800 będzie przydzielony bufor 1500×1000, a nie 2400×1600 jak w starym silniku.
  • Wsparcie technologii DMA-BUF do użycia wielu GPU i przenoszenia pojedynczych operacji na inny GPU.
  • Poprawnie obsługiwane są wiele węzłów renderujących, z którymi były problemy w starej implementacji.

Ograniczenia nowych silników obejmują brak wsparcia dla pozycjonowania na wartości niecałkowite (fractional position) oraz węzły glshader, które były mocno związane ze specyfiką starego silnika, a ich potrzeba zniknęła po dodaniu wsparcia dla węzłów z maskami (mask) i tekstur z przezroczystością. Wspomniano również o możliwości pojawienia się problemów z grafiką związanych ze zmianą metody obsługi sterowników.

W przyszłości na podstawie nowego ujednoliconego modelu nie wyklucza się stworzenia silników graficznych używających Metal w macOS i DirectX w Windows, jednak tworzenie takich silników jest utrudnione z powodu zastosowania innych języków do shaderów (w silnikach „ngl” i „vulkan” używany jest język GLSL, więc dla Metal i Direct będzie trzeba albo duplikować shadery, albo użyć warstwy opartej na narzędziach SPIRV-Cross).

Plany na przyszłość obejmują wsparcie dla HDR oraz narzędzia do prawidłowego zarządzania kolorami, wsparcie dla renderowania ścieżek (Path rendering) po stronie GPU, możliwość renderowania glifów, renderowanie poza głównym wątkiem oraz optymalizację wydajności dla starszych i słabszych urządzeń. W obecnej formie wydajność silnika „vulkan” jest zbliżona do wydajności starego silnika „gl”. Silnik „ngl” jest mniej wydajny od starego silnika „gl”, ale dostępne wyniki są wystarczające do renderowania z częstotliwością 60 lub 144 FPS. Zakłada się, że sytuacja zmieni się po przeprowadzeniu optymalizacji.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster