Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: DenisProgrammer от Январь 23, 2009, 14:26



Название: QGLWidget и QGlPixelBuffer
Отправлено: DenisProgrammer от Январь 23, 2009, 14:26
Всем привет!!!

Пишу приложение на qt 4.4.3 с использованием QGLWidget.

Подскажите пожалуйста:

Как можно реализовать частичную перерисовку изображения?

Будет ли это быстрее чем перерисовка полного экрана?


Название: Re: QGLWidget и QGlPixelBuffer
Отправлено: Dendy от Январь 23, 2009, 15:27
Всё зависит от сложности сцены. Вообще можно, если сцена 2-х мерная. Если 3D - скорее всего не получится, так как нужно очищать буфер экрана и глубины.


Название: Re: QGLWidget и QGlPixelBuffer
Отправлено: DenisProgrammer от Январь 23, 2009, 16:05
Расскажите пожалуйста подробнее как реализовать а то я только с классами openGl в QT разбираться начал.


Название: Re: QGLWidget и QGlPixelBuffer
Отправлено: Dendy от Январь 23, 2009, 19:38
А Qt здесь вообще никаким местом. Только родное API OpenGL. Рисовать нужно точно так же, как и с помощью растровой графики, только не очещать буфер между перерисовками. Но по большому счёту заранее удостоверьтесь надо ли оно вам вообще. Зачастую перерисовать лишь кусок сцены невозможно - только полностью. Даже если вы исхитритесь это сделать, есть шанс что вы загоните себя в тесные рамки.


Название: Re: QGLWidget и QGlPixelBuffer
Отправлено: DenisProgrammer от Январь 24, 2009, 19:59
В программе, которую пишу используется библиотека, которая работает с OpenGl и наверное поддерживает частичную перерисовку экрана (это я выясняю) а для крос платформенности используется qt(менять на что -то другое уже поздно). Меня интересует как организована частичная перерисовка в приложении использующем QGLWidget. А нужно или не нужно это сложный вопрос. Я думаю нужно сначало реализовать частичную перерисовку в моей программе протестировать и по результатам тестов уже будет ясно. Все это нужно для того чтобы увеличить скорость отрисовки. Порекомендуйте чего - нибудь почитать статьи имеется ввиду или книги где может быть хорошо освещен этот вопрос.


Название: Re: QGLWidget и QGlPixelBuffer
Отправлено: Dendy от Январь 24, 2009, 22:04
Мой совет - сначала сделать полную перерисовку. А потом, если не удовлетворят результаты, сделать частичную. Qt здесь ни при чём, вам нужны книги исключительно по OpenGL.


Название: Re: QGLWidget и QGlPixelBuffer
Отправлено: DenisProgrammer от Январь 25, 2009, 01:31
Полная перерисовка уже работает. Цель дальнейшая оптимизация.


Название: Re: QGLWidget и QGlPixelBuffer
Отправлено: kamre от Январь 28, 2009, 00:02
Мой совет - сначала сделать полную перерисовку. А потом, если не удовлетворят результаты, сделать частичную. Qt здесь ни при чём, вам нужны книги исключительно по OpenGL.
Без double buffering перерисовка будет не очень смотреться. А как можно в OpenGL и с double buffering, и с partial update сделать? К тому же в Qt вроде ясно написано:
Цитировать
When any visible part of the scene changes or is reexposed, QGraphicsView will update the entire viewport. This approach is fastest when QGraphicsView spends more time figuring out what to draw than it would spend drawing (e.g., when very many small items are repeatedly updated). This is the preferred update mode for viewports that do not support partial updates, such as QGLWidget, and for viewports that need to disable scroll optimization.


Название: Re: QGLWidget и QGlPixelBuffer
Отправлено: Sergeich от Февраль 07, 2009, 01:48
В свое время делал такую штуку для рендеринга сложных 2D сцен. В основном для оптимицации скроллига и выделения объектов.  Идея такая -  сначала рендеришь сцену в фреймбуфер (пикселбуфер не  юзай - лишние расходы на переключение контекста) или в дополнительный(aux) буфер, затем выводишь полученную картинку в бэк-буфер, в случае скроллинга - со смещением. Потом рендеришь изменившиеся кусочки.
Неплохая подборка статей по OpenGL на русском есть тут: http://steps3d.narod.ru/, ну и по-любому, если собираешься дальше работать с OpenGL - red book.