2015-05-16 6 views
9

Я рисую что-то на экране, используя XWindow Drawable, Pixmap и XRender. Я вижу, что иногда мерцает. Есть ли способ ждать VBLANK? Я уже много гугл, чувствую, что ищу монеты в лесу.Как подождать VSYNC в приложении Xlib?

НЕТ участия OpenGL. Это Linux (Ubuntu). Я мог бы использовать (nano) sleep(), но должен знать, когда пришло время рисовать.

+0

Удалось ли вам это исправить? (Найти документацию по связанным с X технологиям сложно ...) –

ответ

3

Я нахожу, что наиболее простым решением является использование GLX из-за его превосходного интерфейса высокого уровня для синхронизации и двойной буферизации. Обратите внимание, что GLX не является OpenGL, это расширение X. Вам нужен фиктивный контекст OpenGL, поскольку SwapBuffers (по какой-то нечетной причине) требует его, но это все об этом.

Если вы хотите сделать это без GLX по какой-либо причине, вы можете сделать это, создав двойные буферы через X Double Buffer Extension (DBE) и синхронизируйте их вручную для отображения с помощью расширения X Syncronization Extension. Я не сделал так себе, но вы должны быть в состоянии найти что-то по своему вкусу вызова XSyncListSystemCounters (после надлежащей инициализации!):

XSyncListSystemCounters возвращает указатель на массив системных счетчиков, поддерживаемого дисплей

Невозможно найти гораздо больше о трудном пути. Удачи.