diff --git a/libraries/procedural/src/procedural/Procedural.cpp b/libraries/procedural/src/procedural/Procedural.cpp index cc9e5841ed..6cf9f05372 100644 --- a/libraries/procedural/src/procedural/Procedural.cpp +++ b/libraries/procedural/src/procedural/Procedural.cpp @@ -75,6 +75,7 @@ void Procedural::parse(const QString& userDataJson) { auto proceduralData = getProceduralData(userDataJson); // Instead of parsing, prep for a parse on the rendering thread // This will be called by Procedural::ready + std::lock_guard lock(_proceduralDataMutex); _proceduralData = proceduralData.toObject(); _proceduralDataDirty = true; } @@ -165,6 +166,7 @@ void Procedural::parse(QJsonObject proceduralData) { bool Procedural::ready() { // Load any changes to the procedural if (_proceduralDataDirty) { + std::lock_guard lock(_proceduralDataMutex); parse(_proceduralData); _proceduralDataDirty = false; } diff --git a/libraries/procedural/src/procedural/Procedural.h b/libraries/procedural/src/procedural/Procedural.h index 0d602eab4f..75872ca2bc 100644 --- a/libraries/procedural/src/procedural/Procedural.h +++ b/libraries/procedural/src/procedural/Procedural.h @@ -65,6 +65,7 @@ protected: // Rendering object descriptions, from userData QJsonObject _proceduralData; + std::mutex _proceduralDataMutex; QString _shaderSource; QString _shaderPath; QUrl _shaderUrl;