Как избежать мерцания в графических чертежах с помощью X11

Рисуем график в окне. Мы обновляем кривые каждые 50 мс значениями, полученными от оборудования, например, датчиков. Нам нужно отобразить значения в графическом формате. Таким образом, мы обновляем график каждые 50 мс. Это приводит к мерцанию. Мы пишем код в X11. Есть ли способ избежать мерцания графического рисунка в X11. Заранее спасибо.


person VigneshK    schedule 18.02.2013    source источник
comment
оконная библиотека? Вы рисуете прямо на экране? Если да, то почему вы не рисуете в закадровый буфер? Тот, который затем выводится на экран после завершения рисования кривых для текущего «окна» 50 мс.   -  person enhzflep    schedule 18.02.2013
comment
Спасибо за ваше предложение, но мы уже рисуем график с помощью растрового изображения, а затем копируем в окно, в этом случае также окна мерцают. Мы делаем эту графику в дочернем окне. Мы создали три дочерних окна с одним корневым окном. мы рисуем графики в дочернем окне. Я сомневаюсь, что нам нужно обрабатывать события, но теперь мы не использовали никаких событий.   -  person VigneshK    schedule 19.02.2013
comment
Ответ слишком длинный для комментария - см. добавленный «ответ»   -  person enhzflep    schedule 19.02.2013


Ответы (2)


Ключевое слово здесь — двойная буферизация. Но я не знаю, предлагает ли x11 это из коробки или вам нужно реализовать это самостоятельно, поэтому я оставлю поиск в гугле для вас ;)

Кроме того, вы можете рассмотреть возможность обновления реже. Возможно, достаточно обновиться с периодом 250, 500 или 1000 мс? Конечно, это зависит от вашего варианта использования.

person SvenS    schedule 18.02.2013

Пожалуйста. Хм. Что ж, в таком случае я бы проверил настройки X-сервера для машин, на которых он будет работать. Недавно я получил новую видеокарту и обнаружил, что приложения openGL запускали большее количество кадров в секунду, но качество было ужасным — был видимый «разрыв» изображения — вы могли постоянно видеть комбинацию последнего и текущие кадры одновременно. После того, как я включил ожидание VSynch в настройках XServer, проблема исчезла. Однако это больше похоже на проблему, с которой я сталкивался в MS Windows в прошлом. В этом конкретном случае, каждый раз, когда я отправлял новое изображение в элемент управления, окна перерисовывали фон окна/диалога, который находился под окном изображения. Таким образом, вместо того, чтобы просто заменить старое изображение, оно стерло изображение до стандартного серого цвета, прежде чем перейти к замене изображения (гррр). Если у вас есть доступ к достаточно быстрому программному обеспечению для записи экрана, вы можете снимать видео во время работы приложения, а затем воспроизводить видео кадр за кадром. С другой стороны, вы можете получить некоторую поддержку, если будете искать «отключить перерисовку/стирание фона окна X11» или что-то подобное. :)

Думаю, это также будет зависеть от того, использовали ли вы Gtk+, wxWidgets или просто сырой код X11.

person enhzflep    schedule 19.02.2013
comment
Мы используем необработанный код X11. Мы используем XCopyArea для рисования растрового изображения в окне. Нужно ли нам использовать команду XSync в коде? где нам нужно это сделать. - person VigneshK; 19.02.2013
comment
Читая справочную страницу XCopyArea, я с особым интересом отмечаю текст Если области исходного прямоугольника скрыты и не сохранены в резервном хранилище или если указаны области за пределами исходного рисуемого объекта, эти области не скопировано. Вместо этого во всех соответствующих областях назначения, которые либо видны, либо сохранены в резервном хранилище, происходит следующее. Если целевым окном является окно с фоном, отличным от «Нет», соответствующие области целевого окна замкнуты этим фоном — я бы проверил фон целевого окна. - person enhzflep; 19.02.2013
comment
Спасибо за ваш ответ. Мы используем XCopyArea с правильным регионом. В нашем коде мы не устанавливали фон как none. Я попытался установить для XSetBackgroundPixmap значение none, но не получил правильного вывода, вместо этого все окно окрашено цветом переднего плана. - person VigneshK; 19.02.2013
comment
Добро пожаловать. (извините, я забыл сказать это и в прошлый раз) Я действительно совсем не знаком с X11, поэтому боюсь, что у меня сейчас нет предложений, извините. :( Я добавил вопрос в закладки и вернусь, если у меня появятся еще идеи. :) - person enhzflep; 19.02.2013