Как избежать разрыва экрана в Linux + QT

Насколько я понимаю, X11 не поддерживает механизм двойной\тройной буферизации, чтобы избежать разрывов экрана. поэтому я попытался использовать виджеты openGL, затем я понял, что нет никакой поддержки для openGL + raspberry pi + qt4.

Все, о чем я прошу, это очень простая вещь, поймать кадры с видеокамеры, обработать их и показать на экране, и я получаю очень много! плохой разрыв экрана.

Я знаю, что QT5+WAYLAND+PI имеет какую-то (?) поддержку openGL, поможет ли это мне решить эту проблему? (достаточно просто, и я имею в виду небольшие изменения в моем приложении!!) есть что-нибудь еще, что я могу делать? (кроме изменения исходного кода X11...) :)


person Alex    schedule 28.09.2015    source источник


Ответы (1)


Если вы ориентируетесь на Raspberry Pi, я предлагаю вам использовать плагин eglfs Qt 5, что означает OpenGL через EGL без X11. EGL предотвращает разрывы, и производительность очень хорошая.

person Luca Carlon    schedule 28.09.2015
comment
У меня нет опыта работы с openGL, и я не могу найти примеры для openGL+raspberry. в основном у меня есть приложение с несколькими кнопками и QLabel (чтобы показать захват камеры), мое приложение все время находится в полноэкранном режиме (ведьма хороша, так как это одно из ограничений этого плагина QT5 EGFL ..), вы можете помочь мне с примером? (я ничего не нашел), и насколько сложно преобразовать мое приложение в openGL? (у него очень простой графический интерфейс) - person Alex; 28.09.2015
comment
Нет кода OpenGL. Вы используете код Qt так же, как и на X11. Используйте QLabel, чтобы установить QPixmap с правильно преобразованными данными, поступающими с устройства. OpenGL прозрачно используется Qt. Или лучше перенести данные в QML и реализовать пользовательский интерфейс в QML: снова без кода OpenGL. - person Luca Carlon; 28.09.2015
comment
так что я просто беру свое приложение qt4 + небольшие изменения (изменения заголовков), и все должно работать? как мне использовать этот плагин qt5 egfl? извините за глупые вопросы.. - person Alex; 28.09.2015
comment
Существуют дополнительные ограничения для окон на основе OpenGL. Начиная с Qt 5.3, eglfs поддерживает одно полноэкранное окно GL (например, QWindow на основе OpenGL, QQuickView или QGLWidget). Открытие дополнительных окон OpenGL или смешивание таких окон с содержимым на основе QWidget не поддерживается и приведет к завершению работы приложения с сообщением об ошибке. (из документации), так как же будет работать добавление qlabel? отец больше, как мне интегрировать кнопки? - person Alex; 28.09.2015
comment
Добавление QLabel работает, если вы просто создаете его и не смешиваете с другими типами поверхностей. Пожалуйста, обратитесь к документации: doc.qt.io/qt-5/embedded- Linux.html. Qt Quick — лучший способ, но ваш вариант использования довольно прост. Кнопку можно использовать, создав экземпляр соответствующего класса, например QPushButton. - person Luca Carlon; 28.09.2015
comment
У меня уже есть проект qt4, он использует простые кнопки qpush и qlabel + setpixmap, поэтому вы в основном говорите, что все, что мне нужно, это скомпилировать этот проект с небольшими изменениями qt5 + (qt4 -> qt5), и если я запущу это это приложение использует режим плагина qt5 eflgs, все должно просто работать? .. хорошо, я попробую это и опубликую свои выводы. - person Alex; 28.09.2015
comment
хорошо спасибо. но как мне отметить ответ как принятый? если вы хотите проголосовать за это, я не могу этого сделать (низкая репутация). - person Alex; 10.10.2015