[Interest] Qt3D memory leaks

Sean Harmer sean.harmer at kdab.com
Thu Apr 13 08:58:34 CEST 2017


On 13/04/2017 07:09, Igor Mironchik wrote:
> Hello,
> 3Dtree has been updated. Now autumn is animated. Removed hand-made
> classes of leaf geometry and mesh. Now example uses ready mesh prepared
> in Blender. Modified a little constants of the tree. Example looks nice.
> This is a benchmark of your video card, because leafs and branches are
> stand alone objects (QEntity). For example 5 years tree has ~ 900
> objects. My Intel Pentium with Intel HD graphics normally paint only 5
> years tree, 6 years tree starts to slow down.

Yes, at present each entity with a material/geometry renderer combo gets 
translated to an OpenGL draw call. We are looking to add batching 
(similar to how Qt Quick 2 works) but it's not there yet.

If you don't need to address each individual leaf/branch in your object 
model. E.g. if you're just rendering them, then you can get *much* 
better performance by using instanced rendering.

Essentially you have one entity representing all leaves. This entity 
contains the material and geometry renderer as normal. The positions and 
any other custom properties that vary between instances (rotation, leaf 
size, leaf colour etc) should be placed into an additional 
attribute/buffer and provided to the geometry renderer. On this 
attribute, set the divisor property to 1 meaning that 1 piece of data 
maps to 1 instance of the leave in the scene. With this approach you 
will be able to render 10,000's leaves in a single draw call. It maps 
through to a call to glDrawElementsInstanced() in case you want to read 
up on it. Essentially you're moving the for loop over each leaf on to 
the GPU.

Typically, you'd have your data for the leaves in an array in C++ and 
use this to populate the leaf instance buffer.

The plan is to have a batcher that uses this instancing facility.



> And one more - now you can rotate the tree with the left mouse button.
> 11.04.2017 12:15, Igor Mironchik пишет:
>> Hi,
>> I fixed a little 3Dtree. Now branches positions are correct. And I
>> know that not all leafs is visible (this is because leaf geometry is
>> implemented as plain which renders only on one side).
>> 10.04.2017 13:20, Igor Mironchik пишет:
>>> Hello,
>>> I guess that Qt3D has huge memory leaks.
>>> You can check it on this example: https://github.com/igormironchik/3Dtree
>>> It's 3D tree, that grows year by year.
>>> By default tree will grow 5 years (5 minutes).
>>> When tree grown you can restart tree. And here I delete all resources:
>>> void
>>> MainWindowPrivate::createTree()
>>> {
>>> if(m_tree)
>>> {
>>> for(constauto&e:m_rootEntity->childNodes())
>>> e->deleteLater();
>>> }
>>> m_tree=newBranch(m_startPos,m_endPos,c_startBranchRadius,
>>> true,m_rootEntity);
>>> m_tree->setAge(0.0f);
>>> m_tree->updatePosition();
>>> m_tree->placeLeafs();
>>> }
>>> But a lot of memory are eaten.
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest

Dr Sean Harmer | sean.harmer at kdab.com | Managing Director UK
KDAB (UK) Ltd, a KDAB Group company
Tel. +44 (0)1625 809908; Sweden (HQ) +46-563-540090
Mobile: +44 (0)7545 140604
KDAB - Qt Experts

More information about the Interest mailing list