Po sześciu miesiącach prac opublikowano wydanie pakietu wayland-protocols 1.34, zawierającego zestaw protokołów i rozszerzeń, które uzupełniają możliwości podstawowego protokołu Wayland oraz oferują niezbędne funkcje do budowy serwerów kompozytowych i środowisk użytkownika.
Wszystkie protokoły kolejno przechodzą przez trzy fazy — rozwój, testowanie i stabilizację. Po zakończeniu etapu rozwoju (kategoria „unstable”) protokół trafia do gałęzi „staging” i oficjalnie zostaje włączony do zestawu wayland-protocols, a po zakończeniu testowania przenoszony jest do kategorii stabilnych. Protokół z kategorii „staging” można już stosować w serwerach i klientach kompozytowych, gdzie wymagana jest związana z nim funkcjonalność. W przeciwieństwie do kategorii „unstable” w „staging” zabronione są zmiany, które naruszają zgodność, jednak w przypadku wykrycia problemów i niedociągnięć podczas testowania nie wyklucza się zamiany na nową, znaczącą wersję protokołu lub inne rozszerzenie Wayland.
W nowej wersji zaproponowano kilka nowych protokołów, umieszczonych w kategorii „staging”:
- «xdg-toplevel-drag» — rozszerza mechanizm „drag & drop” o możliwość przypinania okien górnego poziomu do operacji przenoszenia, co może być wykorzystane, na przykład, do organizowania przeciągania paneli narzędziowych lub kart przeglądarki. Nowy protokół umożliwia tworzenie odłączanych części okna, które podczas przeciągania z tego okna stają się nowymi oknami i mogą być przenoszone nad istniejącym oknem przed ponownym przypięciem.
- «xdg-dialog» — pozwala przypisywać górnym powierzchniom cechy specyficzne dla okien dialogowych, na przykład można tworzyć dialogi modalne, które blokują interakcję użytkownika z pozostałą częścią interfejsu.
- „linux-drm-syncobj” — dostarcza narzędzia do jawnej synchronizacji buforów za pomocą obiektów synchronizacji DRM (Direct Rendering Manager). Zakłada się, że w kontekście synchronizacji przy rysowaniu do bufora proponowany protokół poprawi wsparcie dla sterowników opartych na grafikach API Vulkan i OpenGL (wdrożenie opiera się na obsłudze w driverach). Nowy protokół umożliwia upewnienie się, że operacja rysowania do bufora zakończyła się przed tym, jak menedżer kompozycji wyświetli ten bufor.
Obecnie w skład zestawu wayland-protocols wchodzą następujące stabilne protokoły, które zapewniają zgodność wsteczną:
- «viewporter» — pozwala klientowi na wykonywanie działań związanych z powiększaniem i przycinaniem krawędzi powierzchni po stronie serwera.
- «presentation-time» — zapewnia wyświetlanie wideo.
- „xdg-shell” — interfejs do tworzenia i interakcji z powierzchniami jak z oknami, co pozwala na ich przemieszczanie po ekranie, minimalizowanie, maksymalizowanie, zmienianie rozmiaru itd.
- „linux-dmabuf” — umożliwia współdzielenie kilku kart graficznych za pomocą technologii DMA-BUF (pozwala na stworzenie wl_buffer opartego na DMA-BUF).
Protokoły testowane w gałęzi «staging»:
- drm-lease — zapewnia zasoby niezbędne do tworzenia stereo obrazu z różnymi buforami dla lewego i prawego oka przy wyjściu na hełmy VR.
- «ext-session-lock» — definiuje środki blokady sesji, na przykład podczas działania wygaszacza ekranu lub wyświetlania dialogu autoryzacji.
- «single-pixel-buffer» — pozwala na tworzenie jednopikselowych buforów, zawierających cztery 32-bitowe wartości RGBA.
- «xdg-activation» — pozwala na przekazywanie fokusów między różnymi powierzchniami pierwszego poziomu (na przykład za pomocą xdg-activation jedna aplikacja może przełączyć fokus na inną).
- content-type — pozwala klientom na przesyłanie kompozytowi serwera informacji o wyświetlanym zawartości, które mogą być użyte do optymalizacji zachowania w zależności od zawartości, na przykład do ustalania specyficznych właściwości DRM, takich jak „typ treści”. Zadeklarowano wsparcie dla następujących typów treści: none (brak informacji o typie danych), photo (wyświetlanie cyfrowych zdjęć, wymagające minimalnej obróbki), video (wideo lub animacja, wymaga bardziej precyzyjnej synchronizacji, aby wyeliminować przycięcia) oraz game (uruchamianie gier, wymaga wyjścia z minimalnym opóźnieniem).
- ext-idle-notify — umożliwia serwerom kompozytowym przekazywanie klientom powiadomień o braku aktywności użytkownika, co może być używane do aktywacji dodatkowych trybów oszczędzania energii po określonym czasie braku aktywności.
- tearing-control — pozwala wyłączyć synchronizację pionową (VSync) w aplikacjach pełnoekranowych za pomocą impulsu wygaszającego, stosowanego w celu ochrony przed pojawianiem się zjawiska zerwania obrazu (tearing). W aplikacjach multimedialnych pojawianie się artefaktów z powodu zerwań jest niepożądanym efektem, jednak w programach gier można się z nimi pogodzić, jeśli ich eliminacja prowadzi do dodatkowych opóźnień.
- ext-foreign-toplevel-list — umożliwia uzyskanie informacji o powierzchniach umieszczonych na samym szczycie (toplevel), które pozwalają na organizację przypinania okien nad inną zawartością, na przykład do podłączenia własnych paneli i przełączników okien.
- security-context — pozwala identyfikować klientów korzystających z izolacji sandbox. Klient może zarejestrować nowe połączenie z kompozytowym serwerem opartym na Wayland i przypisać mu kontekst bezpieczeństwa, po czym na podstawie wskazanego kontekstu bezpieczeństwa kompozytowy menedżer ograniczy możliwości dostępne dla ustalonego połączenia.
- cursor-shape — alternatywny sposób dostosowywania wyglądu kursora, oparty na przesyłaniu serii obrazów kursora zamiast przypinania do powierzchni (wl_surface).
- „ext-transient-seat” — przeznaczony do tworzenia tymczasowych niezależnych sesji (seat), zaprojektowanych do użycia z wirtualnymi urządzeniami wejściowymi. Na przykład przy realizacji możliwości podłączenia do zdalnym pulpitem protokół pozwala stworzyć dla każdego użytkownika oddzielną sesję z wirtualną klawiaturą i myszą.
Protokół, który jest rozwijany w gałęzi «unstable»:
- «fullscreen-shell» — zarządzanie pracą w trybie pełnoekranowym.
- «input-method» — obsługa metod wprowadzania.
- «idle-inhibit» — blokada uruchamiania wygaszacza ekranu (ekranowej zasłony).
- «input-timestamps» — znaczniki czasowe dla zdarzeń wejściowych.
- «keyboard-shortcuts-inhibit» — zarządzanie przypinaniem kombinacji klawiszowych i skrótów klawiszowych.
- «linux-explicit-synchronization» — specyficzny dla Linux mechanizm synchronizacji buforów związany z powierzchnią.
- «pointer-gestures» — zarządzanie gestami z ekranów dotykowych.
- «pointer constraints» — ograniczenia wskaźników (blokada).
- «primary-selection» — podobnie jak w X11 zapewnia działanie pierwszego bufora wymiany (primary selection), z którego wstawianie informacji zazwyczaj odbywa się za pomocą środkowego przycisku myszy.
- «relative pointer events» — względne zdarzenia wskaźników.
- „tablet” — wsparcie dla wejścia z tabletów.
- «text-input» — organizacja wprowadzania tekstu.
- «xdg-foreign» — interfejs interakcji z powierzchniami „sąsiedniego” klienta.
- «xdg-decoration» — renderowanie dekoracji okien po stronie serwera.
- «xdg-output» — dodatkowe informacje o wyjściu wideo (używane do skalowania niecałkowitego).
- «xwayland-keyboard-grab» — przechwytywanie wejścia w aplikacjach XWayland.
Źródło: opennet.ru
