Russian Qt Forum

Qt => Qt Quick => Тема начата: ecspertiza от Ноябрь 24, 2014, 13:03



Название: QQuickView нативное рисование
Отправлено: ecspertiza от Ноябрь 24, 2014, 13:03
В 5 ом Qt появилось много нововведений в том числе и QQuickView который теперь отрисовывает qml через OpenGL юзая графическую карту. Но как показывает практика для продакшена это не очень хорошо, порою даже очень плохо.  Возникает вопрос, можно ли рисовать qml в QQuickView нативно, через процессор как это было раньше. QDeclarativeView предоставлял для этого выбор.


Название: Re: QQuickView нативное рисование
Отправлено: ecspertiza от Ноябрь 24, 2014, 14:34
Angle - не катит, пробовал его юзать, но уж очень долгая инициализация ока получается. Если я не буду удалять окно из памяти инициализация будет гораздо быстрее, но 150 метров в памяти, меня не устраивает держать. Это учитывая то, что у меня не такой уж и большой qml. Создание пустого QQuickView занимает 30метров памяти :-) это очень жирно, но если хотя бы отрисовка была шустрая, было бы не плохо. А так пользователи со слабой видеокартой, получают путяные тормоза.


Название: Re: QQuickView нативное рисование
Отправлено: RSATom от Ноябрь 24, 2014, 15:21
рисовать qml в QQuickView нативно, через процессор

Что именно имеется в виду? что знаит "нативно"?


Название: Re: QQuickView нативное рисование
Отправлено: ecspertiza от Ноябрь 24, 2014, 16:32
Я под этим подразумеваю, когда графика отрисовывается через процессор.


Название: Re: QQuickView нативное рисование
Отправлено: RSATom от Ноябрь 24, 2014, 18:36
Т.е. без GPU? Можно конечно попытаться поиграться с QSurfaceFormat (http://qt-project.org/doc/qt-5/qsurfaceformat.html) - но ИМХО сомнительно что такая возможность есть. Еще можно попробовать использовать сборку Qt для OpenGL (которая не использует Angle Lib).


Название: Re: QQuickView нативное рисование
Отправлено: vregess от Ноябрь 24, 2014, 20:10
Я под этим подразумеваю, когда графика отрисовывается через процессор.

ecspertiza хочет software rendering для QML. В qt 5.4 появился QRasterWindow, не знаю, можно ли его прикрутить.
Но судя по иерархии классов (QQuickWindow и QRasterWindow наследуются от QWindow), вряд ли можно в нем отображать QML сцену.
Скорее всего QML рисуется только через opengl, и это "by design". Так что либо отказаться от QML в пользу graphics view, либо мириться с opengl/angle.

А еще появился QQuickRenderControl (http://doc-snapshot.qt-project.org/qt5-dev/qquickrendercontrol.html). Может быть при помощи него можно такое реализовать.

http://qt-project.org/wiki/New-Features-in-Qt-5.4 (http://qt-project.org/wiki/New-Features-in-Qt-5.4)
http://blog.qt.digia.com/blog/2014/11/20/qt-weekly-20-completing-the-offering-qopenglwindow-and-qrasterwindow/ (http://blog.qt.digia.com/blog/2014/11/20/qt-weekly-20-completing-the-offering-qopenglwindow-and-qrasterwindow/)



Название: Re: QQuickView нативное рисование
Отправлено: Отражение луны от Ноябрь 25, 2014, 06:40
Но как показывает практика для продакшена это не очень хорошо, порою даже очень плохо.
Вовсе нет. Проблемы могут наблюдаться на устаревших системах, где драйверы видеокарты не умеют opengl по-человечески. По опыту скажу, что у нас проблемы возникали только со старыми атомами/гма, любой хотя-бы более менее современное самое бюджетное решение отрисовывает qt quick без проблем и лагов.
С 5.4, если я не ошибаюсь, между angle и десктопной графикой можно переключаться на лету. Поэтому Вы вполне можете сделать поддержку устаревших систем через него (а на нормальном железе будет рендериться видеокартой), но скорее всего в этом даже не возникнет потребности, поскольку функционирующего на этой ерунде железа осталось крайне мало. В продакшене их можно будет пересчитать по пальцам.


Название: Re: QQuickView нативное рисование
Отправлено: ecspertiza от Ноябрь 25, 2014, 10:41
Qt 5.4 пока не рассматривал, ибо он еще в бете.

В случае нашего софта, его гибкость очень критична, так как наш клиент загружает больше 1000 человек в день и у всех разное железо. К сожалению мы выпустили новую версию клиента на Qt 5.3 + Angle, у большого количества пользователей оказалась либо слабая GPU либо это терминальные клиенты, либо как показала практика народ вообще драйвера не ставит. И как следствие получаем

1. Тормоза при рисовании.
2. Вообще не запускается софт.

Опять же очень долгая инициализация окна у QQuickView, если декларатив это делает мгновенно, в сотую секунды точно вкладывается, QQuickView пол секунды точно ждет, оно и понятно, там много инициализаций. Все цифры на глаз, но заметил не один я.

Сборку под OpenGl пробовали, получились теже проблемы + отдельные проблемы с Windows XP там что то с зависимостями было, точно не скажу.

Пока для себя понял так. Сейчас юзать декларатив, а потом тестировать Qt 5.4.

Спасибо за советы, подумаю.


Название: Re: QQuickView нативное рисование
Отправлено: vregess от Ноябрь 27, 2014, 20:14
Вот вышел Qt 5.4 RC и digia в блоге рассказала о динамическом выборе реализации OpenGL.

Похоже "рисовалка" будет подгружаться по алгоритму:

* Сначала пробуем "взрослый" OpenGL.
* Если не получилось, пробуем ANGLE.
* Если не получилось, пробуем opengl32sw - предполагается, что это реализация software rendering. И из коробки уже будут предлагать реализацию Mesa llvmpipe.

И, наверное, либо придется таскать с собой все реализации openGL, либо форсить какую-то версию, например Qt::AA_UseSoftwareOpenGL для software rendering, и таскать только opengl32sw.

Как раз должно решить проблемы ecspertiza (у меня тоже есть подобный проект, так что слежу).

http://blog.qt.digia.com/blog/2014/11/27/qt-weekly-21-dynamic-opengl-implementation-loading-in-qt-5-4/ (http://blog.qt.digia.com/blog/2014/11/27/qt-weekly-21-dynamic-opengl-implementation-loading-in-qt-5-4/)


Название: Re: QQuickView нативное рисование
Отправлено: ecspertiza от Ноябрь 28, 2014, 13:50
Звучит конечно не плохо, будем пробовать.


Название: Re: QQuickView нативное рисование
Отправлено: navrocky от Декабрь 12, 2014, 10:54
Используй QtQuick1, пока его еще не выкинули. Он рисуется по старинке в графической сцене через QPainter.

Все остальные варианты будут еще тормознее и больше жрать памяти. Это я про llvmpipe.

Новый софтварный рендер только за баблосы и имеет ограничения по эффектам.


Название: Re: QQuickView нативное рисование
Отправлено: ecspertiza от Декабрь 12, 2014, 11:22
Сейчас так и делаю, под виндой QtQuick 1 + QtDeclarative ,а под маком QtQuick 2 + QQuickView там он работает нормально.


Название: Re: QQuickView нативное рисование
Отправлено: vregess от Декабрь 12, 2014, 12:38
А QtQuick1 планируют выпиливать и есть вообще смысл использовать первую версию?
Просто я не задумываясь брал последнюю доступную qtquick2. Интересно узнать в чем по возможностям они отличаются.

ecspertiza, пишешь разные qml для qtquick 1 и 2?

Хотя вот товарищ пишет (http://qt-project.org/forums/viewthread/39564):

Цитировать
Qt Quick 1 is deprecated. It will be maintained (i.e. serious bugs will be fixed) for the duration of Qt 5.x (which will be many years), but it will get no enhancements, and minor bugs might possibly be left unfixed.

Надеюсь, graphicsview оставят, хоть он и не идеален.


Название: Re: QQuickView нативное рисование
Отправлено: ecspertiza от Декабрь 12, 2014, 12:49
По сути только меняю импорт. У меня нет жестких зависимостей от QtQuick 2 например, поэтому код работает одинаково на обоих версиях.


Название: Re: QQuickView нативное рисование
Отправлено: nwnclv от Декабрь 12, 2014, 14:37
http://www.prog.org.ru/index.php?topic=28071.msg204804#msg204804

 Вот же. Пока на этом варианте остановился. BTW qtquick 2d работает как-то странно, либо не работает совсем. У меня на одной машине оно рисет цветную мозайку вместо окна, на второй (хп) просто валится.


Название: Re: QQuickView нативное рисование
Отправлено: Отражение луны от Декабрь 12, 2014, 23:37
В QtQuick 1 есть множество ограничений, изъянов и мелких багов, на которые можно наткнуться в самый неподходящий момент. Фиксить их уже никто не будет, так что рано или поздно переходить придется)


Название: Re: QQuickView нативное рисование
Отправлено: ecspertiza от Декабрь 16, 2014, 10:20
Думаю, в этом случае, я перепишу окно на QGraphicsView. Ибо почти 200 метров в памяти от QQuickView и инциализация от 1ой до 2х секунд меня совсем не устраивают. Под маком инициализация окна по ощущениям тоже ниже, но только первого, а под виндой постоянно. Само собой оставлять окно такого размера в памяти это просто не реально.


Название: Re: QQuickView нативное рисование
Отправлено: navrocky от Декабрь 16, 2014, 11:54
Может у тебя сцена жирная и долго грузится? Сейчас смотрю, qmlscene с несложным qml отъедает у меня 17МБ оперативы. Старт за доли секунды.

Попробуй отображать в main.qml баннер, а всё остальное загружать в фоне с помощью Loader.


Название: Re: QQuickView нативное рисование
Отправлено: ecspertiza от Декабрь 16, 2014, 13:50
Пример сцены можно посмотреть скачав joxi :)

А вот скриншот example http://dl2.joxi.net/drive/0000/0047/47/141216/5b0c2891c2.jpg

не сложный софт уже 40 метров в памяти.


Название: Re: QQuickView нативное рисование
Отправлено: gil9red от Декабрь 16, 2014, 15:18
Пример сцены можно посмотреть скачав joxi :)

А вот скриншот example http://dl2.joxi.net/drive/0000/0047/47/141216/5b0c2891c2.jpg

не сложный софт уже 40 метров в памяти.

Как я слышал, в винде диспетчер не всегда показывает реальное потребление памяти


Название: Re: QQuickView нативное рисование
Отправлено: ecspertiza от Декабрь 16, 2014, 15:35
Возможно, но это сложно доказывать пользователям, тестировщикам или менеджерам проекта. Особенно когда у конкурентов там цифра ниже :)


Название: Re: QQuickView нативное рисование
Отправлено: 0x0001 от Декабрь 30, 2014, 19:18
http://doc.qt.io/QtQuick2DRenderer

Оказывается Вопрос в release Qt5.0.4 таки решен с программным rendering QML2.x , ...




Название: Re: QQuickView нативное рисование
Отправлено: Igors от Декабрь 31, 2014, 09:37
Про Qt Quick ничего не знаю но
.. А так пользователи со слабой видеокартой, получают путяные тормоза.
А что конкретно тормозит? Пример: на старых картах могут очень ощутимо тормозить OpenGL шейдера (к которым так рвется молодежь). Может есть возможность без них. А возврат на старое выглядит совсем бесперспективным.


Название: Re: QQuickView нативное рисование
Отправлено: ecspertiza от Декабрь 31, 2014, 10:38
А что конкретно тормозит? Пример: на старых картах могут очень ощутимо тормозить OpenGL шейдера (к которым так рвется молодежь). Может есть возможность без них. А возврат на старое выглядит совсем бесперспективным.

тормозит qml :) Как пример, можно скачать софт http://joxi.ru - это скриншотилка, так вот когда нажали кнопку сделать скриншот, там появляется курсор для выделения фрагмента экрана. Это окно сделано на qml, само перекрестие на QQuickItem (было сделано), на слабых видео картах, если двигать курсором, то это перекрестие сильно отстает от самого курсора, и дело не в получении координат, они как раз приходят быстро, а дело в отрисовке. Так же в самом софте есть инструменты рисования, они также тормозили отрисовку на старых видюхах. Но тормоза на старом железе это только один из недостатков QQuick.


Название: Re: QQuickView нативное рисование
Отправлено: RSATom от Декабрь 31, 2014, 16:47
Вот это занятненько встретить разработчика joxi  ;D  - пару лет пользовался им, весма полезная утилита, надо сказать...

Но вот то что там используется QML, честно говоря является удивительным, и ИМХО несколько странным решением...


Название: Re: QQuickView нативное рисование
Отправлено: ecspertiza от Декабрь 31, 2014, 18:35
Но вот то что там используется QML, честно говоря является удивительным, и ИМХО несколько странным решением...

почему ? Тулбар который используется для выбора инструментов, удобнее всего реализовать как раз на qml, на мой взгляд. Опять же сцена, если используем QDeclarativeView или QQuickView имеем сразу много плюшек для рисования.


Название: Re: QQuickView нативное рисование
Отправлено: RSATom от Декабрь 31, 2014, 19:24
почему ? Тулбар который используется для выбора инструментов, удобнее всего реализовать как раз на qml, на мой взгляд. Опять же сцена, если используем QDeclarativeView или QQuickView имеем сразу много плюшек для рисования.

С точки зрения возможностей, конечно же, qml позволяет много чего сделать - но обязательность(ну или как минимум желательность) аппаратного ускорения перечеркивает все его приемущества - собственно с этой проблемой вы и столкнулись в итоге. Кстати реализация на виджетах тоже позволяет сделать интересный интерфейс, а жестких требований к аппаратной части этот вариант не предьявляет. Опять же, не такой уж сложный интерфейс у joxi (хотя я возможно не вижу каких то сложностей) чтобы зарубаться на аппаратное ускорение.


Название: Re: QQuickView нативное рисование
Отправлено: panAlexey от Январь 01, 2015, 10:24
Но как показывает практика для продакшена это не очень хорошо, порою даже очень плохо.
Вовсе нет. Проблемы могут наблюдаться на устаревших системах, где драйверы видеокарты не умеют opengl по-человечески.
Моя практика подсказывает, что бизнес не будет менять компы ради второстепенной софтины.
У нас возникли проблемы с joxi например, не на всех компах оно крутится нормально.
Так что увлечение QQuick-программами не особо благоприятно для нашей страны.


Название: Re: QQuickView нативное рисование
Отправлено: panAlexey от Январь 01, 2015, 10:27

С точки зрения возможностей, конечно же, qml позволяет много чего сделать - но обязательность(ну или как минимум желательность) аппаратного ускорения перечеркивает все его приемущества - собственно с этой проблемой вы и столкнулись в итоге.
+1
Я пока с квиком и не думаю заморачиваться.


Название: Re: QQuickView нативное рисование
Отправлено: RSATom от Январь 01, 2015, 12:17
Все зависит от конерктного применения конечно, лично я заинтересовался QML просто потому что он позволяет реализовать то что мне нужно, при этом других альтернатив вообще нет (ну или я их не нашел). А нужна мне очень простая вещь - возможность иметь для одной программы разные интерфейсы (назавем их скины, хотя в моем случае это узковатое определение) - QML же позволяет легко и непринужденно задавать произвольный интерфейс в run-time - но у этого само собой есть своя цена...


Название: Re: QQuickView нативное рисование
Отправлено: ecspertiza от Январь 01, 2015, 13:27
Поэтому мы и вернули все рисование и интерфейс на декларатив. Который не требует аппаратного ускорения. Качайте последнюю версию с портала ;)


Название: Re: QQuickView нативное рисование
Отправлено: navrocky от Январь 01, 2015, 14:30
Так оно сейчас чем рисуется? Скачал потыкать. Вообще подтормаживает серьезно так, когда начинаешь там блюры и линии лепить.

Треевые аппликухи я бы всё-таки делал на обычных виджетах, чтобы было как можно более легковесно. Ну или нужно больше анимации и эффектов, чтобы как-то его оправдать )


Название: Re: QQuickView нативное рисование
Отправлено: ecspertiza от Январь 01, 2015, 18:00
Версия 3.0.3 на декларативе. Странно, что тормозит, после того как убрали QQuickView таких жалоб не было.