LINUX.ORG.RU

История изменений

Исправление Zubok, (текущая версия) :

Дело в том, что все рисовательные операции XRender (да и Core Protocol) не создают roundtrip, то есть они все не требуют ответа от X-сервера. Ты туда поток просто гонишь, а сервак рисует. Все рисовательные операции, которые происходят на X-сервере выполняются один за другим, но они буферизуются Xlib. Когда вдруг X-клиенту надо получить результат рисования назад к себе, то надо убедиться, что все отрисовалось, поэтому перед тем как получать результат надо сбросить оставшиеся запросы и долждаться окончания. Редко когда клиентам надо что-то из X-сервера забирать назад.

XFlush обычно используют, чтобы явно пнуть X-сервер дорисовать то, что еще в очереди ждет, но XFlush не ждет, дорисовалось или нет, а просто форсирует сброс буфера. Обычно XFlush вызывается неявно в XNextEvent и кое-каких еще функциях. XSync — это вообще чистый roundtrip. Обе эти функции даже не команды протокола X11, а именно управляющие функции Xlib. XSync вообще действует тупо. Посылает команду, которая ничего не делает (GetInputFocus) и ждет ответа именно не нее. Если ответ пришел, то все предыдущие уже выполнились.

Исходная версия Zubok, :

Дело в том, что все рисовательные операции XRender (да и Core Protocol) не создают roundtrip, то есть они все не требуют ответа от X-сервера. Ты туда поток просто гонишь, а сервак рисует. Все рисовательные операции, которые происходят на X-сервере выполняются один за другим, но они буферизуются Xlib. Когда вдруг X-клиенту надо получить результат рисования назад к себе, то надо убедиться, что все отрисовалось, поэтому надо перед тем как получать результат, сбросить оставшиеся запросы и долждаться окончания. Редко когда клиентам надо что-то из X-сервера забирать назад.

XFlush обычно используют, чтобы явно пнуть X-Server дорисовать то, что еще в очереди ждет, но XFlush не ждет, дорисовалось или нет, а просто форсирует сброс буфера. Обычно XFlush вызывается неявно в XNextEvent и кое-каких еще функциях. XSync — это вообще чистый roundtrip. Обе эти функции даже не команды протокола X11, а именно управляющие функции Xlib. XSync вообще действует тупо. Посылает команду, которая ничего не делает (GetInputFocus) и ждет ответа именно не нее. Если ответ пришел, то все предыдущие уже выполнились.