Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundację Dzieciom „Zdążyć z Pomocą”.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2025-12-30 15:07:38

  overcq - Użytkownik

overcq
Użytkownik
Zarejestrowany: 2024-11-17
Serwis

Jak odświeżać okno w Wayland?

Dotychczas używałem biblioteki Xcb do wyświetlania animacji w oknie środowiska X Window System. Natomiast teraz zdecydowałem się zmienić środowisko wyświetlania na Wayland.
Już obecne w programie procedury rysowania podpiąłem do nowo napisanego początkowego fragmentu klienta Wayland, posiłkując się wybrakowaną dokumentacją tej biblioteki dostępną w sieci.

Jednak okazało się, że animacja nie jest wyświetlana. Okno jest odświeżane tylko przy zdarzeniach wskaźnika (myszy).
Przy czym w WSL (Windows Subsystem for Linux) z zainstalowanym Debianem odświeżanie jest dokonywane tylko po kliknięciu okna, a w maszynie wirtualnej z zainstalowanym Debianem albo Ubuntu – po przesunięciu wskaźnika nad oknem. Co ciekawe, w WSL po kliknięciu jednego z dwóch identycznych okien programu odświeża tylko to jedno okno, a w maszynie wirtualnej po przesunięciu nad dowolnym oknem z dwóch identycznych odświeża oba okna.

Nie wiem, czy poprawnie wykonuję oczekiwanie na gotowość do narysowania ramki.

Inicjowanie danych Waylanda w programie klienta (uruchamianie) zaczyna się od tej linii: https://github.com/overcq/oux/blob/c7f6a8c75b7b2862 … -face.cx#L398
Procedura rozpoczynająca przerysowanie, gdy będzie gotowość narysowania ramki, jest w tej linii: https://github.com/overcq/oux/blob/c7f6a8c75b7b2862 … -face.cx#L456
Procedura rysująca, gdy jest gotowość rysowania ramki, jest w tej linii: https://github.com/overcq/oux/blob/c7f6a8c75b7b2862 … w-drv.cx#L139

Sprawdziłem przy pomocy logowania, że procedura rysująca jest wykonywana dopiero po przesunięciu wskaźnika nad oknem. (Mimo to w WSL i tak nie odświeża zawartości okna do czasu kliknięcia.)

Logicznie rozważając, gotowość narysowania ramki powinna być wtedy, gdy poprzednia została już narysowana, a nie przy przesuwaniu wskaźnika nad oknem. Chyba że coś źle rozumiem.
Nie wiem, czy źle zaprogramowałem czy Wayland właśnie tak działa.

Dzięki za wszelką pomoc.

⁂

Okazało się, że potrzeba po zarejestrowaniu żądania kolejnej ramki do wyświetlenia wywoływać procedurę “wl_display_flush”. Samo “wl_surface_commit” nie wystarczy.
Teraz w maszynie wirtualnej odświeża animację poprawnie, a w WSL tylko po kliknięciu okna lub po przełączeniu na pulpit z oknem będącym na wierzchu.

Ostatnio edytowany przez overcq (2026-01-03 11:06:01)


Nie znam się, ale się wypowiem.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)