2015-05-16 18 views
9

Rysuję coś na ekranie za pomocą XWindow Drawable, Pixmap i XRender. Widzę, że czasami pojawia się migotanie. Czy istnieje sposób oczekiwania na VBLANK? Już dużo googlowałem, czuję się, jakby szukałem monety w lesie.Jak czekać na VSYNC w aplikacji Xlib?

Nie ma zaangażowanego OpenGL. To jest Linux (Ubuntu). Mogę używać (nano) snu(), ale muszę wiedzieć, kiedy nadszedł czas na losowanie.

+0

Udało ci się to naprawić? (Znalezienie dokumentacji technologii związanych z X jest trudne ...) –

Odpowiedz

3

Uważam, że zdecydowanie najprostszym rozwiązaniem jest używanie GLX ze względu na doskonały interfejs wysokiego poziomu do synchronizacji i podwójnego buforowania. Należy pamiętać, że GLX nie jest OpenGL, jest rozszerzeniem X. Potrzebujesz fikcyjnego kontekstu OpenGL, ponieważ SwapBuffers (z jakiegoś dziwnego powodu) tego wymaga, ale o to chodzi.

Jeśli chcesz zrobić to bez GLX z jakiegokolwiek powodu, możesz to zrobić, tworząc podwójne bufory za pomocą X Double Buffer Extension (DBE) i synchronizować ręcznie do wyświetlenia przy użyciu rozszerzenia X Syncronization. I nie uczyniły siebie, ale powinieneś być w stanie znaleźć coś dla siebie nazywając XSyncListSystemCounters (po prawidłowej inicjalizacji!):

XSyncListSystemCounters zwraca wskaźnik do tablicy liczników systemowych wspieranych przez wyświetlacz

Niestety, nie mogę znaleźć o wiele więcej. Powodzenia.