[Interest] Qt3D memory leaks

Igor Mironchik igor.mironchik at gmail.com
Thu Apr 13 14:34:00 CEST 2017


Hi,

Strange, I launch 3Dtree on Linux under valgrind:

==4321== HEAP SUMMARY:
==4321==     in use at exit: 439,965 bytes in 6,185 blocks
==4321==   total heap usage: 2,207,719 allocs, 2,201,534 frees, 
1,241,469,509 bytes allocated
==4321==
==4321== LEAK SUMMARY:
==4321==    definitely lost: 1,080 bytes in 10 blocks
==4321==    indirectly lost: 7,609 bytes in 55 blocks
==4321==      possibly lost: 416 bytes in 1 blocks
==4321==    still reachable: 430,860 bytes in 6,119 blocks
==4321==         suppressed: 0 bytes in 0 blocks

But on my Windows OS after each restart of tree I receive plus ~100MB 
additional memory.

As I can see this memory still reachable. But why 3Dtree allocates more 
and more memory and doesn't use freed one?

13.04.2017 9:58, Sean Harmer пишет:
> Hi,
>
> 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.
>
> Cheers,
>
> Sean
>
>>
>> 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
>>
>




More information about the Interest mailing list