Pull to refresh

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

Reading time1 min
Views3.7K
Original author: Gunnar Sletta
Одним из недостатков Qt Quick API является то, что хоть рендеринг и выполняется в выделенном потоке, тем не менее наша анимация всегда работает в потоке графического интерфейса пользователя.

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

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


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

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

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

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

Tags:
Hubs:
+19
Comments1

Articles

Change theme settings