Добрый день!
Столкнулся с такой проблемой: унаследовал класс (TWidget) от QGLWidget, переопределил paintEvent, в нём QPainter-ом отрисовываю изображение. QTimer, связанный со слотом TWidget::update, "тИкает" каждые 16 мс (1000 мс / 60 Гц). На хостовой машине (Intel Core i5) отрисовка плавная и красивая. На целевой (Freescale i.MX6, CPU: Quad Core ARM Cortex A9, GPU: 3D - Vivante GC2000, 2D - Vivante GC320) машине FPS падает ~до 20-ти.
Завёл QTime в начале paintEvent, по окончании вывожу QTime::elapsed, показывает 32 мс. Даже при пустом paintEvent, функция QPainter::end() занимает 32 мс. Можно ли как-нибудь уменьшить это время?
Qt 5.4, хостовая ос Windows 7, целевая - QNX 6.6.
Целевая машина пишет, что QOpenGLWidget не прикручен, посему наследуюсь от QGLWidget.
P.S. Пробовал связку QGraphicsView + QGraphicsScene + QGraphicsItem-ы = 1-2 FPS. А при QGraphicsView::setViewPort(new QGLWidget()) - черный экран на целевой машине.
twidget.h
#ifndef TWIDGET_H
#define TWIDGET_H
#include <QGLWidget>
#include <QPaintEvent>
class TWidget : public QGLWidget
{
public:
TWidget();
~TWidget();
protected:
void paintEvent(QPaintEvent*);
};
#endif // TWIDGET_H
twidget.cpp
#include "twidget.h"
#include <QTime>
#include <QPainter>
#include <iostream>
TWidget::TWidget()
{
}
TWidget::~TWidget()
{
}
void TWidget::paintEvent(QPaintEvent *event)
{
QTime time;
time.start();
QPainter painter(this);
std::cout << "Before painter.end() time is: " << time.elapsed() << std::endl << std::flush;
painter.end();
std::cout << "After painter.end() time is: " << time.elapsed() << std::endl << std::flush;
event->accept();
}
Лог на хосте:
 РЈРСВВВВВеньшено Р В Р’В Р СћРІР‚ВВВВР С• 45%
483 x 338 (17.25 килобайт)
|
Лог на целевой:
 РЈРСВВВВВеньшено Р В Р’В Р СћРІР‚ВВВВР С• 61%
675 x 424 (53.32 килобайт)
|