Merge pull request #3672 from ey6es/metavoxels

Fix for metavoxel stream crash/crash on exit.
This commit is contained in:
Andrzej Kapolka 2014-10-27 15:11:53 -07:00
commit 9e086a8d08
4 changed files with 16 additions and 2 deletions

View file

@ -48,6 +48,13 @@ MetavoxelSystem::NetworkSimulation::NetworkSimulation(float dropRate, float repe
bandwidthLimit(bandwidthLimit) { bandwidthLimit(bandwidthLimit) {
} }
MetavoxelSystem::~MetavoxelSystem() {
// kill the updater before we delete our network simulation objects
_updater->thread()->quit();
_updater->thread()->wait();
_updater = NULL;
}
void MetavoxelSystem::init() { void MetavoxelSystem::init() {
MetavoxelClientManager::init(); MetavoxelClientManager::init();
DefaultMetavoxelRendererImplementation::init(); DefaultMetavoxelRendererImplementation::init();

View file

@ -43,6 +43,8 @@ public:
int maximumDelay = 0, int bandwidthLimit = 0); int maximumDelay = 0, int bandwidthLimit = 0);
}; };
virtual ~MetavoxelSystem();
virtual void init(); virtual void init();
virtual MetavoxelLOD getLOD(); virtual MetavoxelLOD getLOD();

View file

@ -27,8 +27,10 @@ MetavoxelClientManager::MetavoxelClientManager() :
} }
MetavoxelClientManager::~MetavoxelClientManager() { MetavoxelClientManager::~MetavoxelClientManager() {
_updater->thread()->quit(); if (_updater) {
_updater->thread()->wait(); _updater->thread()->quit();
_updater->thread()->wait();
}
} }
void MetavoxelClientManager::init() { void MetavoxelClientManager::init() {

View file

@ -1040,6 +1040,9 @@ MetavoxelNode* MetavoxelNode::readSubdivision(MetavoxelStreamState& state) {
} }
void MetavoxelNode::writeSubdivision(MetavoxelStreamState& state) const { void MetavoxelNode::writeSubdivision(MetavoxelStreamState& state) const {
if (!state.shouldSubdivide()) {
return;
}
bool leaf = isLeaf(); bool leaf = isLeaf();
if (!state.shouldSubdivideReference()) { if (!state.shouldSubdivideReference()) {
state.base.stream << leaf; state.base.stream << leaf;