- PVSM.RU - https://www.pvsm.ru -

Поток рендеринга анимации в Qt Quick 2.0

Одним из недостатков Qt Quick API является то, что хоть рендеринг и выполняется в выделенном потоке, тем не менее наша анимация всегда работает в потоке графического интерфейса пользователя.

Запуск же анимации за пределами основного потока приложения имеет то преимущество, что значительно снижает влияние ресурсоёмких задач на анимацию, которые обычно блокируют основной поток и приводят к задержкам анимации.

Существуют три основные проблемы, препятствующие нам вынести анимацию в отдельный поток:

  • Анимация обновляющаяся при изменении свойств. Свойства являются частью QObject и системы мета-объектов. Чтобы избежать безумия с потоками, нам разрешается лишь читать и писать эти свойства в потоке графического интерфейса пользователя.
  • Свойства часто имеют привязки и связи в QML, которые вызывают JavaScript-код, при наступлении неких событий, который также должен выполняться в потоке GUI.
  • Цикл рендера в библиотеке QtQuick завязан на поток GUI, а следовательно, когда данный поток заблокирован, анимация не обновляется.


Как было написано в моём предыдущем [1] посте, данный [2] патч устраняет третью проблему, но оставляет открытым вопрос доступа к QObject и приостановке выполнения JavaScript.

Мой коллега, Marko Niemelä, работает над системой анимации, которая решает проблему связи QObject / QML. Его работа со свойством «animations» находится в playground-песочнице.

Это не функционал Qt 5.0, но возможно мы увидим его в Qt 5.1

Наслаждайтесь!

Автор: vitaly_KF


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/qt-quick/13452

Ссылки в тексте:

[1] предыдущем: http://labs.qt.nokia.com/2012/08/01/scene-graph-adaptation-layer/

[2] данный: https://codereview.qt-project.org/#admin,project,playground/scenegraph,info