Removed isShared variable from block class. using shared_ptr reference counting instead.

This commit is contained in:
David Williams 2009-04-09 22:12:02 +00:00
parent 3a9c42576c
commit 19ed8246ff
2 changed files with 8 additions and 12 deletions

View File

@ -34,7 +34,6 @@ namespace PolyVox
{
public:
POLYVOX_SHARED_PTR< BlockData<VoxelType> > m_pBlockData;
bool m_bIsShared;
bool m_bIsPotentiallySharable;
};
}

View File

@ -76,7 +76,6 @@ namespace PolyVox
for(uint32_t i = 0; i < m_uNoOfBlocksInVolume; ++i)
{
m_pBlocks[i].m_pBlockData = getHomogenousBlockData(0);
m_pBlocks[i].m_bIsShared = true;
m_pBlocks[i].m_bIsPotentiallySharable = false;
}
}
@ -175,21 +174,20 @@ namespace PolyVox
//because it lets us avoid unsharing blocks unnecessarily.
if(block.m_pBlockData->getVoxelAt(xOffset, yOffset, zOffset) != tValue)
{
if(block.m_bIsShared)
if(block.m_pBlockData.unique())
{
POLYVOX_SHARED_PTR< BlockData<VoxelType> > pNewBlockData(new BlockData<VoxelType>(*(block.m_pBlockData)));
block.m_pBlockData = pNewBlockData;
block.m_bIsShared = false;
block.m_bIsPotentiallySharable = false;
block.m_pBlockData->setVoxelAt(xOffset,yOffset,zOffset, tValue);
}
else
{
block.m_pBlockData->setVoxelAt(xOffset,yOffset,zOffset, tValue);
//There is a chance that setting this voxel makes the block homogenous and therefore shareable. But checking
//this will take some time, so for now just set a flag.
block.m_bIsPotentiallySharable = true;
}
else
{
POLYVOX_SHARED_PTR< BlockData<VoxelType> > pNewBlockData(new BlockData<VoxelType>(*(block.m_pBlockData)));
block.m_pBlockData = pNewBlockData;
block.m_bIsPotentiallySharable = false;
block.m_pBlockData->setVoxelAt(xOffset,yOffset,zOffset, tValue);
}
}
}
@ -221,7 +219,6 @@ namespace PolyVox
delete block.m_pBlockData;
block.m_pBlockData = getHomogenousBlockData(homogeneousValue);
block.m_bIsShared = true;
}
//Either way, we have now determined whether the block was sharable. So it's not *potentially* sharable.