crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> 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  


Цитата(lanz @ 31.1.2015, 15:57) *
Скорее всего различаются настройки старого и нового виджета, проверьте что вы создаете контекст поддерживаемой версии и не используете неподдерживаемых расширений.

Ручками я контекст не создаю, использую тот, который сам создается в QOpenGLWidget.
QOpenGLWidget::​context() возвращает 0. Ручками задать контекст нельзя, подскажите в какую сторону копать.

Цитата(wiz29 @ 2.2.2015, 12:50) *
А кто мешает переопределить 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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 0:43