Memory management for volumes.

This commit is contained in:
David Williams
2009-03-26 22:22:04 +00:00
parent fab64488ee
commit 50b3ff407e
4 changed files with 89 additions and 30 deletions

View File

@ -38,8 +38,18 @@ namespace PolyVox
public:
BlockData<VoxelType>* m_pBlockData;
VoxelType m_pHomogenousValue;
bool m_pIsShared;
bool m_pIsPotentiallySharable;
bool m_bIsShared;
bool m_bIsPotentiallySharable;
};
template <typename VoxelType>
class ReferenceCountedBlockData
{
public:
ReferenceCountedBlockData() : m_pBlockData(0), m_uReferenceCount(0) {}
BlockData<VoxelType>* m_pBlockData;
uint32 m_uReferenceCount;
};
template <typename VoxelType>
@ -69,14 +79,10 @@ namespace PolyVox
VolumeIterator<VoxelType> lastVoxel(void);
private:
BlockData<VoxelType>* getHomogenousBlock(VoxelType tHomogenousValue) const;
BlockData<VoxelType>* getHomogenousBlockData(VoxelType tHomogenousValue) const;
//Block<VoxelType>** m_pBlocks;
//bool* m_pIsShared;
//bool* m_pIsPotentiallySharable;
//VoxelType* m_pHomogenousValue;
Block<VoxelType>* m_pBlocks;
mutable std::map<VoxelType, BlockData<VoxelType>*> m_pHomogenousBlocks;
mutable std::map<VoxelType, ReferenceCountedBlockData<VoxelType> > m_pHomogenousBlockData;
uint32 m_uNoOfBlocksInVolume;
uint16 m_uSideLengthInBlocks;