fix reset of VoxelSystem on eraseAllVoxels()

This commit is contained in:
ZappoMan 2013-10-17 18:45:52 -07:00
parent 001418649f
commit ca7225e525
3 changed files with 8 additions and 2 deletions

View file

@ -73,6 +73,7 @@ VoxelSystem::VoxelSystem(float treeScale, int maxVoxels)
_writeRenderFullVBO = true;
_readRenderFullVBO = true;
_tree = new VoxelTree();
_tree->rootNode->setVoxelSystem(this);
pthread_mutex_init(&_bufferWriteLock, NULL);
pthread_mutex_init(&_treeLock, NULL);
@ -133,7 +134,7 @@ void VoxelSystem::voxelUpdated(VoxelNode* node) {
}
if (node->getVoxelSystem() == this) {
bool shouldRender = false; // assume we don't need to render it
bool shouldRender = false; // assume we don't need to render it
// if it's colored, we might need to render it!
shouldRender = node->calculateShouldRender(_viewFrustum);

View file

@ -79,6 +79,7 @@ void VoxelNode::init(unsigned char * octalCode) {
_unknownBufferIndex = true;
setBufferIndex(GLBUFFER_INDEX_UNKNOWN);
setVoxelSystem(NULL);
_isDirty = true;
_shouldRender = false;
@ -146,7 +147,9 @@ std::map<uint8_t, VoxelSystem*> VoxelNode::_mapIndexToVoxelSystemPointers;
VoxelSystem* VoxelNode::getVoxelSystem() const {
if (_voxelSystemIndex > INDEX_FOR_NULL) {
if (_mapIndexToVoxelSystemPointers.end() != _mapIndexToVoxelSystemPointers.find(_voxelSystemIndex)) {
return _mapIndexToVoxelSystemPointers[_voxelSystemIndex];
VoxelSystem* voxelSystem = _mapIndexToVoxelSystemPointers[_voxelSystemIndex];
return voxelSystem;
}
}
return NULL;

View file

@ -476,7 +476,9 @@ void VoxelTree::deleteVoxelCodeFromTreeRecursion(VoxelNode* node, void* extraDat
void VoxelTree::eraseAllVoxels() {
// XXXBHG Hack attack - is there a better way to erase the voxel tree?
delete rootNode; // this will recurse and delete all children
VoxelSystem* voxelSystem = rootNode->getVoxelSystem();
rootNode = new VoxelNode();
rootNode->setVoxelSystem(voxelSystem);
_isDirty = true;
}