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

Twórcy biblioteki GTK ogłosili dostępność dwóch nowych silników renderujących - „ngl” i „vulkan”, korzystających z interfejsów graficznych 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 domyślnie używany jest silnik ngl, ale jeśli w następnej stabilnej gałęzi 4.14 zostaną zidentyfikowane poważne problemy, przywrócony zostanie stary silnik renderujący „gl”.

Nowe silniki są pozycjonowane jako ujednolicone i złożone z jednej bazy kodu. Istota ujednolicenia polega na tym, że jako podstawę wykorzystano API Vulkan, na którym utworzono oddzielny poziom abstrakcji dla OpenGL, uwzględniający różnice pomiędzy OpenGL i Vulkan. Takie podejście umożliwiło wykorzystanie wspólnej infrastruktury w obu silnikach do przetwarzania wykresu sceny, transformacji, buforowania tekstur i glifów. Ujednolicenie znacznie uprościło także utrzymanie bazy kodowej obu silników oraz utrzymanie ich aktualności i synchronizacji.

W przeciwieństwie do starego silnika gl, który wykorzystywał oddzielny prosty moduł cieniujący dla każdego typu węzła renderowania i okresowo ponownie sortował dane podczas renderowania poza ekranem, nowe silniki zamiast renderowania poza ekranem używają złożonego modułu cieniującego (ubershader), który interpretuje dane z bufora . Nowe wdrożenie w swojej obecnej formie nadal pozostaje w tyle za starym pod względem poziomu optymalizacji, ponieważ na obecnym etapie główny nacisk kładziony jest na prawidłowe działanie i łatwość konserwacji.

Nowe funkcje, których brakuje w starym silniku gl:

  • Wygładzanie konturu - pozwala zachować drobne szczegóły i uzyskać gładsze kontury.
    Do GTK dodano nowe silniki renderujące dla OpenGL i Vulkan
  • Tworzenie dowolnych gradientów, które mogą wykorzystywać dowolną liczbę kolorów oraz antyaliasing (w silniku gl obsługiwane były tylko gradienty liniowe, promieniowe i stożkowe z 6 kolorami stop).
    Do GTK dodano nowe silniki renderujące dla OpenGL i Vulkan
  • Skala ułamkowa, która pozwala ustawić wartości skali niecałkowitej, np. przy zastosowaniu skali 125% dla okna 1200x800 zostanie przydzielony bufor o wielkości 1500x1000, a nie 2400x1600 jak w starym silniku.
  • Obsługa technologii DMA-BUF w celu korzystania z wielu procesorów graficznych i przenoszenia poszczególnych operacji na inny procesor graficzny.
  • Wiele węzłów renderujących, które miały problemy w starej implementacji, jest przetwarzanych poprawnie.

Ograniczeniami nowych silników jest brak obsługi pozycjonowania według wartości niecałkowitych (pozycja ułamkowa) oraz węzłów glshadera, które były mocno powiązane z funkcjonalnościami starego silnika, a które po dodaniu obsługi dla węzły z maskami (maskami) i teksturami z przezroczystością. Wspomniano również, że istnieje możliwość wystąpienia problemów ze sterownikami graficznymi, powstałych w wyniku zmian w sposobie pracy ze sterownikami.

W przyszłości, w oparciu o nowy, ujednolicony model, nie jest wykluczone tworzenie silników renderujących wykorzystujących Metal w macOS i DirectX w Windows, ale tworzenie takich silników komplikuje użycie innych języków dla shaderów („ngl ” i „vulkan” używają języka GLSL, więc w przypadku Metal i Direct konieczne będzie albo zduplikowanie shaderów, albo użycie warstwy opartej na zestawie narzędzi SPIRV-Cross).

Plany na przyszłość obejmują zapewnienie obsługi HDR i narzędzi do prawidłowego zarządzania kolorami, obsługę renderowania ścieżki po stronie procesora graficznego, możliwość renderowania glifów, renderowania poza strumieniem oraz optymalizację wydajności dla starszych i energooszczędnych urządzeń. W obecnej formie osiągi silnika „vulkan” są zbliżone do osiągów starego silnika „gl”. Silnik „ngl” ma gorszą wydajność od starego silnika „gl”, ale dostępna wydajność jest wystarczająca do renderowania przy 60 lub 144 FPS. Oczekuje się, że po optymalizacji sytuacja ulegnie zmianie.

Źródło: opennet.ru

Dodaj komentarz