summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2017-01-05 14:33:40 +0000
committerSean Harmer <sean.harmer@kdab.com>2017-01-05 14:34:00 +0000
commit29f9d33d4449dcf2e89c9d3a96a204d05e2162ed (patch)
treed3056c0aaf84120cdbe28175582be8d5a98c8075
parent1600778e1ed5809246c6c8c90d6b22fdcbcb2abb (diff)
parent32605e5e25ebcc8de0ca0a8327248e6d28853cd4 (diff)
Merge branch '5.8.0' into 5.8
-rw-r--r--src/render/backend/renderer.cpp2
-rw-r--r--src/render/backend/uniform.cpp2
-rw-r--r--src/render/geometry/buffermanager.cpp9
-rw-r--r--src/render/geometry/buffermanager_p.h3
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