Hi Denis,

Most Qt widgets are not drawn using opengl but instead are rasterized.  I was surprised when I first learned this as well.

"QPainter <http://doc.qt.io/qt-5/qpainter.html> provides API for drawing vector graphics, text and images onto different surfaces, or QPaintDevice <http://doc.qt.io/qt-5/qpaintdevice.html> instances, such as QImage <http://doc.qt.io/qt-5/qimage.html>, QOpenGLPaintDevice <http://doc.qt.io/qt-5/whatsnew50.html#qopenglpaintdevice>, QWidget <http://doc.qt.io/qt-5/qwidget.html>, and QPrinter <http://doc.qt.io/qt-5/qprinter.html>. The actual drawing happens in the QPaintDevice <http://doc.qt.io/qt-5/qpaintdevice.html>'s QPaintEngine <http://doc.qt.io/qt-5/qpaintengine.html>. The software rasterizer and the OpenGL (ES) 2.0 back-ends are the two most important QPaintEngine <http://doc.qt.io/qt-5/qpaintengine.html> implementations. *The raster paint engine is Qt’s software rasterizer, and is used when drawing on a QImage <http://doc.qt.io/qt-5/qimage.html> or QWidget <http://doc.qt.io/qt-5/qwidget.html>.* Its strength over the OpenGL paint engine is its high quality when antialiasing is enabled, and a complete feature set.”


On 29/08/18 06:21 AM, Denis Shienkov wrote:
I even have created a simple test app, which re-fill the 1280x800 rect every 50 msec with the 'red' and 'green' colors.

[code]
#include<QApplication>
#include<QWidget>
#include<QPaintEvent>
#include<QPainter>
classWidgetfinal:publicQWidget
{
public:
explicitWidget(QWidget*parent=nullptr);
private:
voidpaintEvent(QPaintEvent*event)final;
voidtimerEvent(QTimerEvent*event)final;
};
Widget::Widget(QWidget*parent)
:QWidget(parent)
{
startTimer(50);
}
voidWidget::paintEvent(QPaintEvent*event)
{
QPainterp(this);
staticbooltoggled=false;
constautocolor=(toggled)?QColor(Qt::red):QColor(Qt::green);
constautorect=event->rect();
p.fillRect(rect,color);
toggled=!toggled;
}
voidWidget::timerEvent(QTimerEvent*event)
{
Q_UNUSED(event);
update();
}
intmain(intargc,char*argv[])
{
QApplicationapp(argc,argv);
Widgetw;
w.setMinimumSize(1280,800);
w.show();
returnapp.exec();
}
[/code]

And then I see that the Desktop PC has the ~0% CPU load, but the iMX6 has ~50% CPU load. WTF?

BR,
Denis



ср, 29 авг. 2018 г. в 12:39, Denis Shienkov <denis.shien...@gmail.com <mailto:denis.shien...@gmail.com>>:

    Hi all.

    I have an Apalis iMX6 board with the Yocto's image with the
    working 'eglfs' and 'linuxfb'  backends (without of X11 support).

    I need to create a 'pure' QtWidgets application, where I need to
    use a real-time plotting with the Qwt library (using the Qt Quick
    is not an option, as there the QtCharts is not ready for usage) .

    But, I'm sadly surprised that a 2D painting takes ~100% CPU
    loading as with the 'eglfs' and as with 'linuxfb' backends. It is
    not an acceptable, because, e.g. on Desktop Linux/Windows it takes
    ~4-5% CPU loading.

    Is any workarounds for this? Maybe I need to re-build the Yocto's
    image to enable the X11 'xcb' support?

    BR,
    Denis




_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to