diff options
Diffstat (limited to 'src/datavisualization/utils')
-rw-r--r-- | src/datavisualization/utils/meshloader.cpp | 4 | ||||
-rw-r--r-- | src/datavisualization/utils/objecthelper.cpp | 86 | ||||
-rw-r--r-- | src/datavisualization/utils/qutils.h | 4 |
3 files changed, 54 insertions, 40 deletions
diff --git a/src/datavisualization/utils/meshloader.cpp b/src/datavisualization/utils/meshloader.cpp index 274d4a13..fa071a96 100644 --- a/src/datavisualization/utils/meshloader.cpp +++ b/src/datavisualization/utils/meshloader.cpp @@ -81,6 +81,10 @@ bool MeshLoader::loadOBJ(const QString &path, QList<QVector3D> &out_vertices, QStringList set1 = lineContents.at(1).split(slashTag); QStringList set2 = lineContents.at(2).split(slashTag); QStringList set3 = lineContents.at(3).split(slashTag); + if (set1.length() < 3 || set2.length() < 3 || set3.length() < 3) { + qWarning("The file being loaded is missing UVs and/or normals"); + return false; + } vertexIndex[0] = set1.at(0).toUInt(); vertexIndex[1] = set2.at(0).toUInt(); vertexIndex[2] = set3.at(0).toUInt(); diff --git a/src/datavisualization/utils/objecthelper.cpp b/src/datavisualization/utils/objecthelper.cpp index f8fa01de..87875a98 100644 --- a/src/datavisualization/utils/objecthelper.cpp +++ b/src/datavisualization/utils/objecthelper.cpp @@ -113,10 +113,19 @@ ObjectHelper *ObjectHelper::getObjectHelper(const Abstract3DRenderer *cacheId, objRef = new ObjectHelperRef; objRef->refCount = 0; objRef->obj = new ObjectHelper(objectFile); - objectTable->insert(objectFile, objRef); + if (objRef->obj->m_meshDataLoaded) { + objectTable->insert(objectFile, objRef); + } else { + delete objRef->obj; + delete objRef; + objRef = nullptr; + } + } + if (objRef) { + objRef->refCount++; + return objRef->obj; } - objRef->refCount++; - return objRef->obj; + return nullptr; } void ObjectHelper::load() @@ -140,41 +149,44 @@ void ObjectHelper::load() QList<QVector2D> uvs; QList<QVector3D> normals; bool loadOk = MeshLoader::loadOBJ(m_objectFile, vertices, uvs, normals); - if (!loadOk) - qFatal("loading failed"); - - // Index vertices - VertexIndexer::indexVBO(vertices, uvs, normals, m_indices, m_indexedVertices, m_indexedUVs, - m_indexedNormals); - - m_indexCount = m_indices.size(); - - glGenBuffers(1, &m_vertexbuffer); - glBindBuffer(GL_ARRAY_BUFFER, m_vertexbuffer); - glBufferData(GL_ARRAY_BUFFER, m_indexedVertices.size() * sizeof(QVector3D), - &m_indexedVertices.at(0), - GL_STATIC_DRAW); - glGenBuffers(1, &m_normalbuffer); - glBindBuffer(GL_ARRAY_BUFFER, m_normalbuffer); - glBufferData(GL_ARRAY_BUFFER, m_indexedNormals.size() * sizeof(QVector3D), - &m_indexedNormals.at(0), - GL_STATIC_DRAW); - - glGenBuffers(1, &m_uvbuffer); - glBindBuffer(GL_ARRAY_BUFFER, m_uvbuffer); - glBufferData(GL_ARRAY_BUFFER, m_indexedUVs.size() * sizeof(QVector2D), - &m_indexedUVs.at(0), GL_STATIC_DRAW); - - glGenBuffers(1, &m_elementbuffer); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_elementbuffer); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_indices.size() * sizeof(GLuint), - &m_indices.at(0), GL_STATIC_DRAW); - - glBindBuffer(GL_ARRAY_BUFFER, 0); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - - m_meshDataLoaded = true; + if (!loadOk) { + qCritical() << "Loading" << m_objectFile << "failed"; + m_meshDataLoaded = false; + } else { + // Index vertices + VertexIndexer::indexVBO(vertices, uvs, normals, m_indices, m_indexedVertices, m_indexedUVs, + m_indexedNormals); + + m_indexCount = m_indices.size(); + + glGenBuffers(1, &m_vertexbuffer); + glBindBuffer(GL_ARRAY_BUFFER, m_vertexbuffer); + glBufferData(GL_ARRAY_BUFFER, m_indexedVertices.size() * sizeof(QVector3D), + &m_indexedVertices.at(0), + GL_STATIC_DRAW); + + glGenBuffers(1, &m_normalbuffer); + glBindBuffer(GL_ARRAY_BUFFER, m_normalbuffer); + glBufferData(GL_ARRAY_BUFFER, m_indexedNormals.size() * sizeof(QVector3D), + &m_indexedNormals.at(0), + GL_STATIC_DRAW); + + glGenBuffers(1, &m_uvbuffer); + glBindBuffer(GL_ARRAY_BUFFER, m_uvbuffer); + glBufferData(GL_ARRAY_BUFFER, m_indexedUVs.size() * sizeof(QVector2D), + &m_indexedUVs.at(0), GL_STATIC_DRAW); + + glGenBuffers(1, &m_elementbuffer); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_elementbuffer); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_indices.size() * sizeof(GLuint), + &m_indices.at(0), GL_STATIC_DRAW); + + glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + m_meshDataLoaded = true; + } } QT_END_NAMESPACE diff --git a/src/datavisualization/utils/qutils.h b/src/datavisualization/utils/qutils.h index dc72835e..6a35ff34 100644 --- a/src/datavisualization/utils/qutils.h +++ b/src/datavisualization/utils/qutils.h @@ -38,9 +38,7 @@ QT_BEGIN_NAMESPACE -#ifdef Q_OS_MACOS -#pragma clang diagnostic ignored "-Wunused-function" -#endif +[[maybe_unused]] static inline QSurfaceFormat qDefaultSurfaceFormat(bool antialias) { bool isES = false; |