diff options
author | Tomi Korpipaa <tomi.korpipaa@qt.io> | 2022-08-25 09:07:45 +0300 |
---|---|---|
committer | Tomi Korpipaa <tomi.korpipaa@qt.io> | 2022-08-26 11:03:04 +0300 |
commit | 449f644df503dc409514cafd7b46ee8664e4d451 (patch) | |
tree | 3b5fdba3a3ffb6a3ae317f30ec5bacdadf083810 /src/datavisualization/engine | |
parent | eae43d7f21b29a8d40e2f12f418efd7f9a35a43c (diff) |
Do not crash if custom object load fails
There was no check for the existence of UVs or normals in an OBJ file.
A check for those was added. Additionally a debug message was added in
case model loading fails due to missing UVs or normals. Furthermore,
we no more qFatal out when custom object loading fails.
Pick-to: 6.2 6.4
Fixes: QTBUG-105398
Change-Id: Ie2742fb4307fe117e313cedf8111bc8f460f9c7b
Reviewed-by: Sami Varanka <sami.varanka@qt.io>
Reviewed-by: Kwanghyo Park <kwanghyo.park@qt.io>
Reviewed-by: Dilek Akcay
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'src/datavisualization/engine')
-rw-r--r-- | src/datavisualization/engine/abstract3drenderer.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp index 4ddd19e8..b7a37a20 100644 --- a/src/datavisualization/engine/abstract3drenderer.cpp +++ b/src/datavisualization/engine/abstract3drenderer.cpp @@ -723,8 +723,10 @@ void Abstract3DRenderer::updateCustomData(const QList<QCustom3DItem *> &customIt CustomRenderItem *renderItem = m_customRenderCache.value(item); if (!renderItem) renderItem = addCustomItem(item); - renderItem->setValid(true); - renderItem->setIndex(i); // always update index, as it must match the custom item index + if (renderItem) { + renderItem->setValid(true); + renderItem->setIndex(i); // always update index, as it must match the custom item index + } } // Check render item cache and remove items that are not in customItems list anymore @@ -1127,7 +1129,10 @@ CustomRenderItem *Abstract3DRenderer::addCustomItem(QCustom3DItem *item) CustomRenderItem *newItem = new CustomRenderItem(); newItem->setRenderer(this); newItem->setItemPointer(item); // Store pointer for render item updates - newItem->setMesh(item->meshFile()); + if (!newItem->setMesh(item->meshFile())) { + delete newItem; + return nullptr; + } newItem->setOrigPosition(item->position()); newItem->setOrigScaling(item->scaling()); newItem->setScalingAbsolute(item->isScalingAbsolute()); |