[Interest] [Qt3D] QGeometryRenderer can't be shared
Xavier Bigand
flamaros.xavier at gmail.com
Fri Sep 30 17:30:35 CEST 2016
https://bugreports.qt.io/browse/QTBUG-56305
2016-09-30 16:47 GMT+02:00 Sean Harmer <sh at theharmers.co.uk>:
> Hi,
>
> please do open a JIRA. However, it is more natural to share the Geometry
> rather than the GeometryRenderer component itself.
>
> Cheers,
>
> Sean
>
> On 30/09/2016 15:18, Xavier Bigand wrote:
>
>> I found a workaround :
>>
>> QGeometryRenderer*clonedGeometryRenderer=newQGeometryRenderer();
>>
>> QGeometry*clonedMeshGeometry=newQGeometry(clonedGeometryRenderer);
>>
>>
>> foreach(QAttribute*attribute,geometryRenderer->geometry()->attributes())
>>
>> {
>>
>> attribute->buffer()->setParent(clonedMeshGeometry);
>>
>> attribute->setParent(clonedMeshGeometry);
>>
>> clonedMeshGeometry->addAttribute(attribute);
>>
>> }
>>
>> clonedGeometryRenderer->setGeometry(clonedMeshGeometry);
>>
>> subEntity->addComponent(clonedGeometryRenderer);
>>
>>
>>
>> I have to call setParent on buffers and attributes, that will have more
>> than one parent, but it works, they can be shared in this way.
>>
>> Need I open a bug, because it doesn't seems natural and reusing directly
>> a component will be much better.
>>
>>
>>
>>
>> 2016-09-30 15:34 GMT+02:00 Xavier Bigand <flamaros.xavier at gmail.com
>> <mailto:flamaros.xavier at gmail.com>>:
>>
>> I took a look to the addComponent implementation and it seems normal
>> that my code doesn't work because a component is intended to be
>> attached once.
>> So I don't understand the meaning of the shareable flag.
>>
>> I'll try to share the geometry instead.
>>
>> 2016-09-30 15:20 GMT+02:00 Xavier Bigand <flamaros.xavier at gmail.com
>> <mailto:flamaros.xavier at gmail.com>>:
>>
>>
>> I am trying to share my QGeometryRenderer between many Entities,
>> but the addComponent doesn't have any effect.
>>
>> When I load our models from files, I save the root entity node
>> in a map, and after I clone the node tree when a previously
>> model is in the map.
>> I have no issue with the material component that is in the
>> cloned tree, but the geometryRenderer isn't printed by my trace
>> method (material and geometryRenderer components are at the same
>> level on sub-entities).
>>
>> I set the shareable flag to true on the geometryRenderer.
>>
>> PS : for the material component I don't assign the same ptr to
>> the cloned model, because I don't want to share the material all
>> attributs. My material class have is own clone method to copy
>> only the shareable attributs (maps, specular,...).
>>
>>
>> Here is my cloning method :
>>
>> voidModel::cloneModel(Qt3DCore::QEntity*source,Qt3DCore::
>> QEntity&destination)
>>
>> {
>>
>> QNodeVectorsourceEntities=source->childNodes();
>>
>>
>> foreach(QNode*node,sourceEntities)
>>
>> {
>>
>> QEntity*sourceSubEntity=dynamic_cast<QEntity*>(node);
>>
>> QEntity*subEntity=newQEntity(&destination);
>>
>>
>> H3D_ASSERT(sourceSubEntity!=nullptr);
>>
>>
>> subEntity->setObjectName(sourceSubEntity->objectName());
>>
>>
>> QComponentVectorsourceComponents=sourceSubEntity->components();
>>
>>
>> foreach(QComponent*component,sourceComponents)
>>
>> {
>>
>> QGeometryRenderer*geometryRenderer=dynamic_cast<QGeometryRen
>> derer*>(component);
>>
>> LightingMaterial*material=dynamic_cast<LightingMaterial*>(
>> component);
>>
>>
>> if(geometryRenderer)
>>
>> {
>>
>> subEntity->addComponent(geometryRenderer);
>>
>> LOG_INFO("geometryRenderer%s%s",qPrintable(component->metaOb
>> ject()->className()),qPrintable(component->objectName()));
>>
>> }
>>
>> elseif(material)
>>
>> {
>>
>> LightingMaterial*clonedMaterial=newLightingMaterial();
>>
>>
>> clonedMaterial->clone(*material);
>>
>> subEntity->addComponent(clonedMaterial);
>>
>> }
>>
>> elseif(dynamic_cast<QPhongMaterial*>(component))//TODOtoremove
>>
>> {
>>
>> }
>>
>> elseif(dynamic_cast<QPhongAlphaMaterial*>(component))//
>> TODOtoremove
>>
>> {
>>
>> }
>>
>> else
>>
>> {
>>
>> H3D_ASSERT_MSG(false,"Unsupportedcomponenttype%s",qPrintable
>> (component->metaObject()->className()));
>>
>> }
>>
>> }
>>
>> }
>>
>> }
>>
>>
>> I have this issue with Qt 5.7 and 5.8 build from the git branch.
>>
>> --
>> Xavier
>>
>>
>>
>>
>> --
>> Xavier
>>
>>
>>
>>
>> --
>> Xavier
>>
>>
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/interest
>>
>> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
>
--
Xavier
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20160930/24eafb45/attachment.html>
More information about the Interest
mailing list