diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index 4be6675ffa..c9c4c8503a 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -554,12 +554,20 @@ void RenderablePolyVoxEntityItem::render(RenderArgs* args) { assert(getType() == EntityTypes::PolyVox); Q_ASSERT(args->_batch); - if (_voxelDataDirty) { - _voxelDataDirty = false; + bool voxelDataDirty; + bool volDataDirty; + withWriteLock([&] { + voxelDataDirty = _voxelDataDirty; + volDataDirty = _volDataDirty; + if (_voxelDataDirty) { + _voxelDataDirty = false; + } else if (_volDataDirty) { + _volDataDirty = false; + } + }); + if (voxelDataDirty) { decompressVolumeData(); - } - if (_volDataDirty && !_voxelDataDirty) { - _volDataDirty = false; + } else if (volDataDirty) { getMesh(); } diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h index b6b20dc486..e5afb94afa 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h @@ -129,7 +129,7 @@ public: uint8_t getVoxelInternal(int x, int y, int z); bool setVoxelInternal(int x, int y, int z, uint8_t toValue); - void setVolDataDirty() { _volDataDirty = true; } + void setVolDataDirty() { withWriteLock([&] { _volDataDirty = true; }); } private: // The PolyVoxEntityItem class has _voxelData which contains dimensions and compressed voxel data. The dimensions