[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