Russian Qt Forum
Ноябрь 25, 2024, 00:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Включение аппаратного рендеринга OpenGL  (Прочитано 21378 раз)
developer-nsk
Гость
« Ответ #15 : Октябрь 23, 2009, 13:38 »

В этих демках есть полигоны которые OGL действительно ускорит. Если Вы сделаете свои GraphicsItem(s) из чего-то типа QPolygonF - Вы тоже можете рассчитывать на ускорение. А иначе - я не знаю как.

На самом деле ситуация обстоит следующим образом - у меня на сцене есть несколько GraphicsItems, которые представляют из себя QPixmap, причём некоторые из них очень большого размера. У них включен флаг QPainter::SmoothPixmapTransform (сглаженные, иначе говоря), который, как я понимаю, и тормозит всю сцену (а этот флаг нужен обязательно). Так вот, в Affine Transformations тоже вращается картинка, сглаженная таким же образом, но при этом нет ни намёка на тормоза, ибо юзается аппаратное ускорение сглаживания (даже вентилятор на видеокарте включается через несколько минут :-))... Разбирал код демки и так и не понял, как же там они это сделали... Может у кого-то более понятные семплы есть?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #16 : Октябрь 23, 2009, 16:18 »

Разбирал код демки и так и не понял, как же там они это сделали... Может у кого-то более понятные семплы есть?
Возьмите стандартный пример Composition. Там хорошо видно что все равно все сводится к стандартным OGL вещам:

glBindTexture
glBegin
glVertex2f
и.т.п.

Ну и наверное того Артура надо приспособить для обвязки OGL контекста  Улыбающийся
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #17 : Октябрь 24, 2009, 01:06 »

Цитировать
В выпуске QtQuarterly --- Issue 26 · Q2 2008 --- Accelerate your Widgets with OpenGL · Example Code

Думаю вы это ищите - там как работа с QGraphicsView.

Вы посмотрели эту статью?

http://doc.trolltech.com/qq/qq26-openglcanvas.html

неужели не оно?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #18 : Октябрь 25, 2009, 01:10 »

эта фича со встроенными виджетами прикольна конечно, но весьма бажно реализована... Т.е. нормально будет работать не со всеми и не везде. Особенно когда им назначить style sheet Грустный
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
developer-nsk
Гость
« Ответ #19 : Октябрь 30, 2009, 13:55 »


Вы посмотрели эту статью?

http://doc.trolltech.com/qq/qq26-openglcanvas.html

неужели не оно?

Спасибо больше! Именно оно, то, что нужно! Всё получилось, всё заработало :-)
Но появилась теперь ещё одна проблема... Как я уже сказал, карта представляет собой QGraphicsScene с кучей QGraphicsItem'ов, а пользователь может управлять ей виджетами, которые наследуются от QGraphicsView, в котором всё отображается. Но после включение OpenGL простой командой "view->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));" (именно так ларчик открывался, как выяснилось) все виджеты управления стали отображаться на чёрном фоне. Я понимаю, что у них тоже надо как-то изменить что-то типа Viewport, но как? Заранее благодарен за ответ!
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #20 : Октябрь 30, 2009, 17:20 »

Как я уже сказал, карта представляет собой QGraphicsScene с кучей QGraphicsItem'ов, а пользователь может управлять ей виджетами, которые наследуются от QGraphicsView, в котором всё отображается. Но после включение OpenGL простой командой "view->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));" (именно так ларчик открывался, как выяснилось)
То есть достаточно все поместить в QGLWidget - и все ускорится? Хорошо бы если так, но что-то не очень верится  Улыбающийся Вероятно это только удобное создание OGL контекста.
Записан
developer-nsk
Гость
« Ответ #21 : Октябрь 30, 2009, 18:22 »

Как я уже сказал, карта представляет собой QGraphicsScene с кучей QGraphicsItem'ов, а пользователь может управлять ей виджетами, которые наследуются от QGraphicsView, в котором всё отображается. Но после включение OpenGL простой командой "view->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));" (именно так ларчик открывался, как выяснилось)
То есть достаточно все поместить в QGLWidget - и все ускорится? Хорошо бы если так, но что-то не очень верится  Улыбающийся Вероятно это только удобное создание OGL контекста.

Вы знаете, это может показаться странным, но именно так! Достаточно было добавить эту команду, чтобы включилось аппаратное ускорение... Даже кулер на видеокарте включается через некоторое время работы! Но теперь проблема с виджетами... Поменяв viewport у view я не знаю, как поменять его у виджетов-наследников, посему у них не обновляется фон :-( Как это лечится - ума не приложу.
Записан
Геннадий Пастухов
Гость
« Ответ #22 : Ноябрь 01, 2009, 17:45 »


Вы знаете, это может показаться странным, но именно так! Достаточно было добавить эту команду, чтобы включилось аппаратное ускорение... Даже кулер на видеокарте включается через некоторое время работы! Но теперь проблема с виджетами... Поменяв viewport у view я не знаю, как поменять его у виджетов-наследников, посему у них не обновляется фон :-( Как это лечится - ума не приложу.

У меня при добавлении этой команды на месте виджета появляется чёрный фон. Причём такое ощущение, что там что-то отображается, поскольку при вращении колеса мыши появляются полосы прокрутки и они меняются, но на месте виджета всё равно чёрный фон. Пытаюсь я там отобразить большой svg файл, размером примерно 8600х7900 точек. Что у меня может быть не так?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #23 : Ноябрь 01, 2009, 17:55 »

У меня при добавлении этой команды на месте виджета появляется чёрный фон. Причём такое ощущение, что там что-то отображается, поскольку при вращении колеса мыши появляются полосы прокрутки и они меняются, но на месте виджета всё равно чёрный фон. Пытаюсь я там отобразить большой svg файл, размером примерно 8600х7900 точек. Что у меня может быть не так?
Не проверял (нет сейчас задач с OGL). Но стоит посмотреть это дела OGL или нет. В paint добавить
Код:
glClearColor(1.0f,  0.0f, 0.0f, 0.0f);              // red background
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 23.