[Development] Rendering with different framerates into one scene

Christoph Kurz c.kurz at melph.de
Fri Mar 14 15:49:21 CET 2014


Hi,
I have a very interesting theoretical problem, where I'd like to have a few
opinions on:
I want to render different elements in the UI with different render rates.
The idea behind that is, that on an embedded device you have very limited
graphics performance, which means that you cannot achieve 60fps on the whole UI.
Instead, you render the important parts (say a specific widget or QML-object)
with 60fps, and unimportant parts (like background or complex 3D models) with
only 30fps.

As I understand it, this is currently not supported by the scenegraph - at least
not without dirty hacks that can e.g. prevent the rendering of a specific object
in every second cycle.
But this approach is a key element in trying to wring the best visual results
out of a weak embedded device, and it is deeply integrated in other scenegraph
implementations.
I am aware that Qt does not focus on such things, so I believe that this will
never be implemented. My question is: Would it be possible to add such a feature
to the Qt-Scenegraph?
At the moment this is a pure hypothetical question, as I don't think I will have
time for this in the near future. But I'm very interested in your opinion on
this, as I don't have any knowledge of the scenegraph internals.

Ideally it would look like this:
You can specify a minimumRenderRate and a maximumRenderRate in every (graphical)
QML-Item, and just like other properties, those are inherited by the children,
but can be overwritten by them.
The Scenegraph tries to render all Items with their minimumRenderRate. If there
is still idle time, it renders all Items faster, up to their maximumRenderRate.
If the performance is not good enough for the minimumRenderRate of the Items, it
tries to render them in proportion to their minimumRenderRates.

Example:
ItemA{
    minimumRenderRate: 40
    maximumRenderRate: 60
    //do something with graphics here
}
ItemB{
    minimumRenderRate: 30
    maximumRenderRate: 60
    //do something with graphics here
}

Now, if there is more than enough graphics power, ItemA and ItemB are rendered
with 60fps; If there is just enough power, ItemA is rendered with 40fps, ItemB
with 30fps. If there is not enough power for this, then ItemA could be rendered
with 20fps, ItemB with 15fps.

Now the questions:
- Is that (or something similar) possible with the Qt scenegraph?
- How much effort would it be to implement it?
- Do you have useful links to additional articles / blogs that shed more light
on the scenegraph internals?

Regards,
Chris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20140314/e60ada7f/attachment.html>


More information about the Development mailing list