[Development] iMX6 EGLGS 2D (QtWidgets) painting acceleration

Uwe Rathmann Uwe.Rathmann at tigertal.de
Sun Sep 2 14:42:47 CEST 2018


On Thu, 30 Aug 2018 15:47:34 -0700, Thiago Macieira wrote:

> You can always just use QPainter on a QPixmap and paint that pixmap on
> your QSGPaintedItem. It won't be particularly fast, but it will work and
> do what you asked.

After some conversation with Denis: the use case of this thread is a 
oscilloscope - drawing a polyline with ~400 points, 10 times a second.

It is possible to reduce the CPU load from 100% to 50% simply by using a 
QOpenGLWidget as plot canvas. With raster we probably never reached 10 
frames, so all we know is that the improvement is more than by factor 2.

The rest seems to be related to the grid lines, and updating the tick 
labels on the axis.

Updating the tick labels 10 times a second does not make much sense as 
nobody can read this. So I would consider this being an issue, that has 
to be solved on application side.

But the grid lines are responsible for ~30% of the remaining CPU load, so 
let's spend some thoughts on this:

drawing them requires a sequence of QPainter::drawLine calls ( maybe 
10-20 ) with a pen width of 1 in Qt::DotLine style. Changing the style to 
Qt::SolidLine makes this part of the CPU load disappear - actually the 
CPU load becomes the same as when not drawing the grid at all.

So I would guess that the CPU cycles are related to calculating the dots 
for each line before forwarding it to some OpenGL call.

> If you want faster, redesign with OpenGL in mind.

What does that mean for a task like drawing a dotted line and why do you 
consider application code being more effective in finding a fast 
implementation for this ?

I would expect the author/maintainer of the OpenGL paint engine being an 
expert in how to use OpenGL in the most effective way and the job of this 
module should be to keep away those details from the application code.

And what would be the benefit of Qt/Quick for drawing dotted lines ? How 
would it be different/superior compared to writing pure OpenGL code - f.e 
in QOpenGLWidget::paintGL ?

And why should Denis use Qt at all if he is supposed to break down basic 
primitives to pure OpenGL himself ?

Uwe





More information about the Development mailing list