[Development] Status of Qt3D in 5.5
Sean Harmer
sean.harmer at kdab.com
Mon Feb 9 17:15:42 CET 2015
On Monday 09 Feb 2015 07:25:38 Thiago Macieira wrote:
> On Monday 09 February 2015 13:55:29 Sean Harmer wrote:
> > * Replacement for Threadweaver to allow commercial licensing. This is
> > underway thanks to Mika and is under review on gerrit at present.
>
> (As discussed in the release team meeting) The rest sounds like API reviews
> and only the above is a gating issue for the feature freeze and alpha
> release. If you can't get the code in shippable state by next Monday, then
> it misses the freeze. However, since it is an entire module, it can still
> re-join the rest of the modules for the beta.
Some bits are API review, some are missing API.
>
> > As these parts of the API are not finished just yet and the feature freeze
> > is today
>
> It's one week from today.
We'll get done what we can in the meantime.
> PS: why do you need a complex threaded job-dispatching mechanism in a 3D
> library?
Just within the renderer there are many tasks that can be performed
distributed but which have some degree of dependencies between them. For
example, rendering a complete frame may require several distinct
configurations of the renderer. In Qt3D these correspond to the leaf nodes of
the framegraph. For example:
0) Update the world transformations of objects that have moved and their
children
1) build render commands that will draw the scene from camera 1 into a
texture, then
2) build render commands that will draw the scene to the default framebuffer
using camera 2 but using the texture from step 1 to texture a tv screen in the
world.
3) Submit render commands built in earlier steps to OpenGL
Steps 1) and 2) can be executed in parallel but only after step 0) has
completed. And even within steps 1) and 2) it may be beneficial to spawn
additional jobs off as the scenegraph is traversed and converted to render
commands and each batch is sorted to minimise state changes during submission.
Similar for step 0) in fact.
Step 3) can only be executed once the earlier jobs of creating rendercommands
has completed. This happens on a dedicated OpenGL submission thread due to the
nature of OpenGL vs threads.
This is just a very simple example. The framegraphs can have many more steps
involved to render a frame and Qt3D also allows additional aspects to be added
which can add their own sets of jobs with dependencies between them.
Trying to come up with a generic way to manage all this whilst making good use
of n cores is a good fit for ThreadWeaver or Intel TBB or something else along
the same lines.
Hope that explains it a little.
Cheers,
Sean
--
Dr Sean Harmer | sean.harmer at kdab.com | Managing Director UK
Klarälvdalens Datakonsult AB, a KDAB Group company
Tel. Sweden (HQ) +46-563-540090, USA +1-866-777-KDAB(5322)
KDAB - Qt Experts - Platform-independent software solutions
More information about the Development
mailing list