diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2017-01-05 14:33:40 +0000 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-01-05 14:34:00 +0000 |
commit | 29f9d33d4449dcf2e89c9d3a96a204d05e2162ed (patch) | |
tree | d3056c0aaf84120cdbe28175582be8d5a98c8075 | |
parent | 1600778e1ed5809246c6c8c90d6b22fdcbcb2abb (diff) | |
parent | 32605e5e25ebcc8de0ca0a8327248e6d28853cd4 (diff) |
Merge branch '5.8.0' into 5.8
Change-Id: I2d387ace8d5661d992b93841ec642b062f51e612
-rw-r--r-- | src/render/backend/renderer.cpp | 2 | ||||
-rw-r--r-- | src/render/backend/uniform.cpp | 2 | ||||
-rw-r--r-- | src/render/geometry/buffermanager.cpp | 9 | ||||
-rw-r--r-- | src/render/geometry/buffermanager_p.h | 3 |
4 files changed, 11 insertions, 5 deletions
diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp index 88bce753f..cf7e53256 100644 --- a/src/render/backend/renderer.cpp +++ b/src/render/backend/renderer.cpp @@ -1536,7 +1536,7 @@ bool Renderer::requiresVAOAttributeUpdate(Geometry *geometry, void Renderer::cleanGraphicsResources() { // Clean buffers - const QVector<Qt3DCore::QNodeId> buffersToRelease = std::move(m_nodesManager->bufferManager()->buffersToRelease()); + const QVector<Qt3DCore::QNodeId> buffersToRelease = m_nodesManager->bufferManager()->takeBuffersToRelease(); for (Qt3DCore::QNodeId bufferId : buffersToRelease) m_graphicsContext->releaseBuffer(bufferId); diff --git a/src/render/backend/uniform.cpp b/src/render/backend/uniform.cpp index 821dd6992..c2088b60f 100644 --- a/src/render/backend/uniform.cpp +++ b/src/render/backend/uniform.cpp @@ -226,7 +226,7 @@ UniformValue UniformValue::fromVariant(const QVariant &variant) } default: - Q_UNREACHABLE(); + qWarning() << "Unknown uniform type or value:" << variant << "Please check your QParameters"; } return v; } diff --git a/src/render/geometry/buffermanager.cpp b/src/render/geometry/buffermanager.cpp index 09d9cfd50..78c2c0082 100644 --- a/src/render/geometry/buffermanager.cpp +++ b/src/render/geometry/buffermanager.cpp @@ -65,14 +65,19 @@ QVector<Qt3DCore::QNodeId> BufferManager::dirtyBuffers() return vector; } +// Called in QAspectThread::syncChanges void BufferManager::addBufferToRelease(Qt3DCore::QNodeId bufferId) { + QMutexLocker lock(&m_mutex); m_buffersToRelease.push_back(bufferId); } -QVector<Qt3DCore::QNodeId> &BufferManager::buffersToRelease() +// Called in Render thread +QVector<Qt3DCore::QNodeId> BufferManager::takeBuffersToRelease() { - return m_buffersToRelease; + QMutexLocker lock(&m_mutex); + // Clears the m_buffersToRelease vector + return std::move(m_buffersToRelease); } } // namespace Render diff --git a/src/render/geometry/buffermanager_p.h b/src/render/geometry/buffermanager_p.h index 754d65fe6..6862cd973 100644 --- a/src/render/geometry/buffermanager_p.h +++ b/src/render/geometry/buffermanager_p.h @@ -78,11 +78,12 @@ public: // Aspect Thread void addBufferToRelease(Qt3DCore::QNodeId bufferId); // Render Thread (no concurrent access) - QVector<Qt3DCore::QNodeId> &buffersToRelease(); + QVector<Qt3DCore::QNodeId> takeBuffersToRelease(); private: QVector<Qt3DCore::QNodeId> m_dirtyBuffers; QVector<Qt3DCore::QNodeId> m_buffersToRelease; + QMutex m_mutex; }; } // namespace Render |