Повысить производительность «Ускорить ваши виджеты с OpenGL» Qt Sample? - PullRequest
2 голосов
/ 06 мая 2011

Я изучал Qt Quarterly статью о QGraphicsScene и OpenGL с целью использования его в проекте.Я уже решил использовать Qt, учитывая его всестороннее превосходство, но пошел по пути реализации класса, полученного из QGLWidget, однако тогда мне все еще нужно будет реализовать элементы пользовательского интерфейса.Использование методов из цитируемой статьи означало бы, что я мог бы также использовать виджеты Qt для пользовательского интерфейса, делая программу зависимой только от Qt (а не от CEGUI или подобного).

В любом случае, я запускал образец подНастольный Linux-компьютер с процессором Core i7 и довольно хорошей картой Nvidia, и он работает хорошо, однако на моем MacBook Pro 2010 (Core i5 и Nvidia 330) он работает очень плохо, особенно при взаимодействии с ним с помощью мыши.

Вопрос: кто-нибудь может предложить способы улучшения производительности этого образца?Я не эксперт по Qt, но я думаю, что плохой ответ вызван вызовами update() из кода обработки мыши в сочетании с синхронизированными вызовами update() в конце самого метода.Я думаю, что нужен фоновый поток для обновления движения объекта и синхронизированный, но постоянный вызов update().

Может кто-нибудь прокомментировать это?

РЕДАКТИРОВАТЬЯ уже пытался удалить все вызовы на update(), кроме сброса таймера, и это мало что меняет.

1 Ответ

1 голос
/ 07 мая 2011

К сожалению, производительность, которую вы получаете, используя предложения из этой статьи, довольно плохая. Мы попробовали это на встроенной системе, и это было очень медленно.

Для нас решением было использовать QML, новую «декларативную» возможность пользовательского интерфейса в Qt 4.7. У нас есть QML, встроенный в наше приложение C ++. Мы наблюдаем огромные улучшения в скорости, когда виджеты QML накладываются поверх нашей GL-сцены.

Мы используем виджет QDeclarativeView в нашем приложении C ++, которое способно отображать наш контент QML. Смотри: http://doc.qt.io/archives/qt-4.7/qdeclarativeview.html.

Это должно нормально работать на рабочем столе (у меня работает в Ubuntu).

Дополнительные полезные ссылки:

Использование привязок QML в приложениях C ++

Интеграция кода QML с существующим кодом Qt UI

UPDATE! 1/20/2015: В Qt5.4 есть новый класс, называемый QOpenGLWidget, который в основном делает его таким образом, что вы можете использовать «классические» виджеты Qt с фоном OpenGL с большой производительностью. Они наконец обратились к этой проблеме напрямую! Прочтите сообщение в блоге, а затем документы:

Запись в Qt о QOpenGLWidget

QOpenGLWidget Docs

...