QOpenGLWidget on CPU vs deprecated QGLWidget on GPU |
Здравствуйте, гость ( Вход | Регистрация )
QOpenGLWidget on CPU vs deprecated QGLWidget on GPU |
FireBlack |
30.1.2015, 15:03
Сообщение
#1
|
Студент Группа: Участник Сообщений: 38 Регистрация: 17.10.2010 Из: г.Пенза Пользователь №: 2121 Спасибо сказали: 13 раз(а) Репутация: 1 |
Доброго времени суток.
Имеется QGraphicsScene сцена, на которой расположено несколько item'ов. Также имеется QGraphicsView на котором эта сцена отображается. При использовании ui->graphicsView->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))), во время перетаскивания item'а на сцене, загрузка процессора не превышает 50%. При использовании ui->graphicsView->setViewport(new QOpenGLWidget), во время перетаскивания item'а, загрузка процессора не падает ниже 99%. Тоже самое происходит при использовании обычного виджета в качестве vewiport'а. Из этого напрашивается очевидный вывод, что в моем случае с QGLWidget больше используется графический процессор, а с QOpenGLWidget или QWidget - центральный процессор (что не очень хорошо). Меня QGLWidget полностью устраивает, но он отмечен как deprecated (или obsolete), что означает что его исключат в Qt 6. В связи с вышесказаным, хочу спросить у Вас совета, что использовать: быстрый старый QGLWidget или медленный новый QOpenGLWidget? P.S.: Боюсь что оптимизировать код, чтобы снизить нагрузку на проц, не удастся т.к. при перемещении item'а перерисовывается весь background в QGraphicsScene, на котором рисуется большой QPixmap и куча линий между item'ами. |
|
|
lanz |
31.1.2015, 15:57
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Скорее всего различаются настройки старого и нового виджета, проверьте что вы создаете контекст поддерживаемой версии и не используете неподдерживаемых расширений.
|
|
|
wiz29 |
2.2.2015, 12:50
Сообщение
#3
|
Старейший участник Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: 12 |
А кто мешает переопределить void QGraphicsView::drawBackground ( QPainter * painter, const QRectF & rect ) [virtual protected] для конкретного региона?
|
|
|
FireBlack |
2.2.2015, 14:18
Сообщение
#4
|
Студент Группа: Участник Сообщений: 38 Регистрация: 17.10.2010 Из: г.Пенза Пользователь №: 2121 Спасибо сказали: 13 раз(а) Репутация: 1 |
Скорее всего различаются настройки старого и нового виджета, проверьте что вы создаете контекст поддерживаемой версии и не используете неподдерживаемых расширений. Ручками я контекст не создаю, использую тот, который сам создается в QOpenGLWidget. QOpenGLWidget::context() возвращает 0. Ручками задать контекст нельзя, подскажите в какую сторону копать. А кто мешает переопределить void QGraphicsView::drawBackground ( QPainter * painter, const QRectF & rect ) [virtual protected] для конкретного региона? Как я уже говорил, у меня переопределен QGraphicsView::drawBackground. Как перерисоваь конкретный регион, я не представляю т.к. у меня в background рисуются связи между item'ами и при перемещении одного - проще перерисовать весь background. |
|
|
lanz |
3.2.2015, 9:25
Сообщение
#5
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Цитата подскажите в какую сторону копать Вот здесь посмотреть/задать формат http://doc-snapshot.qt-project.org/qt5-5.4...get.html#format http://doc-snapshot.qt-project.org/qt5-5.4...l#defaultFormat http://qt-project.org/doc/qt-4.8/qglwidget.html#format Контекст не инициализирован еще, поэтому возвращает 0 скорее всего. |
|
|
Litkevich Yuriy |
6.2.2015, 19:22
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Я часто использую SVG в графических элементах, и при перемещении маленького элемента над большим наблюдается значительное отставание элемента от указателя мышки.
Если для большого SVG устанавливать кэш Раскрывающийся текст item->setCacheMode(QGraphicsItem::ItemCoordinateCache); то всё приходит в норму. Может и тебе поможет? Сообщение отредактировал Litkevich Yuriy - 6.2.2015, 19:23 |
|
|
Текстовая версия | Сейчас: 22.11.2024, 0:43 |