From 5c77317cfd6e6ce4508c5d870959d955b3352dce Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Thu, 21 Aug 2014 18:07:30 -0700 Subject: [PATCH] Fix for flashing when painting textures. --- interface/src/MetavoxelSystem.cpp | 12 +++++++++--- interface/src/MetavoxelSystem.h | 5 ++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/interface/src/MetavoxelSystem.cpp b/interface/src/MetavoxelSystem.cpp index 9a143706ed..3864b0537f 100644 --- a/interface/src/MetavoxelSystem.cpp +++ b/interface/src/MetavoxelSystem.cpp @@ -118,7 +118,7 @@ void MetavoxelSystem::render() { viewFrustum->getNearBottomLeft(), viewFrustum->getNearBottomRight()); RenderVisitor renderVisitor(getLOD()); - guideToAugmented(renderVisitor); + guideToAugmented(renderVisitor, true); } class RayHeightfieldIntersectionVisitor : public RayIntersectionVisitor { @@ -459,13 +459,19 @@ MetavoxelClient* MetavoxelSystem::createClient(const SharedNodePointer& node) { return new MetavoxelSystemClient(node, _updater); } -void MetavoxelSystem::guideToAugmented(MetavoxelVisitor& visitor) { +void MetavoxelSystem::guideToAugmented(MetavoxelVisitor& visitor, bool render) { foreach (const SharedNodePointer& node, NodeList::getInstance()->getNodeHash()) { if (node->getType() == NodeType::MetavoxelServer) { QMutexLocker locker(&node->getMutex()); MetavoxelSystemClient* client = static_cast(node->getLinkedData()); if (client) { - client->getAugmentedData().guide(visitor); + MetavoxelData data = client->getAugmentedData(); + data.guide(visitor); + if (render) { + // save the rendered augmented data so that its cached texture references, etc., don't + // get collected when we replace it with more recent versions + client->setRenderedAugmentedData(data); + } } } } diff --git a/interface/src/MetavoxelSystem.h b/interface/src/MetavoxelSystem.h index 752a060b86..ac4dd430fb 100644 --- a/interface/src/MetavoxelSystem.h +++ b/interface/src/MetavoxelSystem.h @@ -57,7 +57,7 @@ protected: private: - void guideToAugmented(MetavoxelVisitor& visitor); + void guideToAugmented(MetavoxelVisitor& visitor, bool render = false); AttributePointer _pointBufferAttribute; AttributePointer _heightfieldBufferAttribute; @@ -92,6 +92,8 @@ public: /// Returns a copy of the augmented data. This function is thread-safe. MetavoxelData getAugmentedData(); + void setRenderedAugmentedData(const MetavoxelData& data) { _renderedAugmentedData = data; } + virtual int parseData(const QByteArray& packet); protected: @@ -102,6 +104,7 @@ protected: private: MetavoxelData _augmentedData; + MetavoxelData _renderedAugmentedData; QReadWriteLock _augmentedDataLock; };