More tidying up.
This commit is contained in:
parent
ed355b856f
commit
bf9f5aee48
@ -514,7 +514,9 @@ int main(int argc, char *argv[])
|
|||||||
//createSphereInVolume(volData, 30);
|
//createSphereInVolume(volData, 30);
|
||||||
//createPerlinTerrain(volData);
|
//createPerlinTerrain(volData);
|
||||||
createPerlinVolumeSlow(volData);
|
createPerlinVolumeSlow(volData);
|
||||||
|
std::cout << "Memory usage: " << volData.sizeInBytes() << std::endl;
|
||||||
volData.setBlockCacheSize(8);
|
volData.setBlockCacheSize(8);
|
||||||
|
std::cout << "Memory usage: " << volData.sizeInBytes() << std::endl;
|
||||||
|
|
||||||
/*srand(12345);
|
/*srand(12345);
|
||||||
for(int ct = 0; ct < 1000; ct++)
|
for(int ct = 0; ct < 1000; ct++)
|
||||||
|
@ -70,10 +70,6 @@ namespace PolyVox
|
|||||||
uint8_t m_uSideLengthPower;
|
uint8_t m_uSideLengthPower;
|
||||||
bool m_bIsCompressed;
|
bool m_bIsCompressed;
|
||||||
bool m_bIsUncompressedDataModified;
|
bool m_bIsUncompressedDataModified;
|
||||||
|
|
||||||
private:
|
|
||||||
Block(const Block& rhs);
|
|
||||||
Block& operator=(const Block& rhs);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -46,19 +46,6 @@ namespace PolyVox
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VoxelType>
|
|
||||||
Block<VoxelType>::Block(const Block<VoxelType>& rhs)
|
|
||||||
{
|
|
||||||
assert(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename VoxelType>
|
|
||||||
Block<VoxelType>& Block<VoxelType>::operator=(const Block<VoxelType>& rhs)
|
|
||||||
{
|
|
||||||
assert(false);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename VoxelType>
|
template <typename VoxelType>
|
||||||
uint16_t Block<VoxelType>::getSideLength(void) const
|
uint16_t Block<VoxelType>::getSideLength(void) const
|
||||||
{
|
{
|
||||||
@ -147,7 +134,7 @@ namespace PolyVox
|
|||||||
uint32_t Block<VoxelType>::sizeInBytes(void)
|
uint32_t Block<VoxelType>::sizeInBytes(void)
|
||||||
{
|
{
|
||||||
uint32_t uSizeInBytes = sizeof(Block<VoxelType>);
|
uint32_t uSizeInBytes = sizeof(Block<VoxelType>);
|
||||||
uSizeInBytes += m_vecCompressedData.capacity() * sizeof(RunlengthEntry);
|
uSizeInBytes += m_vecCompressedData.capacity() * sizeof(RunlengthEntry<uint16_t>);
|
||||||
return uSizeInBytes;
|
return uSizeInBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,11 +170,10 @@ namespace PolyVox
|
|||||||
public:
|
public:
|
||||||
Block<VoxelType>* getUncompressedBlock(uint16_t uBlockX, uint16_t uBlockY, uint16_t uBlockZ) const;
|
Block<VoxelType>* getUncompressedBlock(uint16_t uBlockX, uint16_t uBlockY, uint16_t uBlockZ) const;
|
||||||
|
|
||||||
//Block<VoxelType> m_pBorderBlock;
|
|
||||||
VoxelType* m_pUncompressedBorderData;
|
VoxelType* m_pUncompressedBorderData;
|
||||||
|
|
||||||
Block<VoxelType>* m_pBlocks;
|
mutable std::vector< Block<VoxelType> > m_pBlocks;
|
||||||
uint32_t* m_pUncompressedTimestamps;
|
mutable std::vector<uint32_t> m_pUncompressedTimestamps;
|
||||||
mutable std::vector< UncompressedBlock > m_vecUncompressedBlockCache;
|
mutable std::vector< UncompressedBlock > m_vecUncompressedBlockCache;
|
||||||
uint16_t m_uMaxUncompressedBlockCacheSize;
|
uint16_t m_uMaxUncompressedBlockCacheSize;
|
||||||
uint32_t m_ulastAccessedBlockIndex;
|
uint32_t m_ulastAccessedBlockIndex;
|
||||||
|
@ -53,8 +53,6 @@ namespace PolyVox
|
|||||||
,m_uCompressions(0)
|
,m_uCompressions(0)
|
||||||
,m_uUncompressions(0)
|
,m_uUncompressions(0)
|
||||||
,m_uBlockSideLength(uBlockSideLength)
|
,m_uBlockSideLength(uBlockSideLength)
|
||||||
,m_pBlocks(0)
|
|
||||||
,m_pUncompressedTimestamps(0)
|
|
||||||
,m_pUncompressedBorderData(0)
|
,m_pUncompressedBorderData(0)
|
||||||
,m_ulastAccessedBlockIndex((std::numeric_limits<uint32_t>::max)()) //An invalid index
|
,m_ulastAccessedBlockIndex((std::numeric_limits<uint32_t>::max)()) //An invalid index
|
||||||
{
|
{
|
||||||
@ -182,13 +180,6 @@ namespace PolyVox
|
|||||||
const uint16_t yOffset = uYPos - (blockY << m_uBlockSideLengthPower);
|
const uint16_t yOffset = uYPos - (blockY << m_uBlockSideLengthPower);
|
||||||
const uint16_t zOffset = uZPos - (blockZ << m_uBlockSideLengthPower);
|
const uint16_t zOffset = uZPos - (blockZ << m_uBlockSideLengthPower);
|
||||||
|
|
||||||
/*const Block<VoxelType>& block = m_pBlocks
|
|
||||||
[
|
|
||||||
blockX +
|
|
||||||
blockY * m_uWidthInBlocks +
|
|
||||||
blockZ * m_uWidthInBlocks * m_uHeightInBlocks
|
|
||||||
];*/
|
|
||||||
|
|
||||||
Block<VoxelType>* pUncompressedBlock = getUncompressedBlock(blockX, blockY, blockZ);
|
Block<VoxelType>* pUncompressedBlock = getUncompressedBlock(blockX, blockY, blockZ);
|
||||||
|
|
||||||
return pUncompressedBlock->getVoxelAt(xOffset,yOffset,zOffset);
|
return pUncompressedBlock->getVoxelAt(xOffset,yOffset,zOffset);
|
||||||
@ -242,13 +233,6 @@ namespace PolyVox
|
|||||||
const uint16_t yOffset = uYPos - (blockY << m_uBlockSideLengthPower);
|
const uint16_t yOffset = uYPos - (blockY << m_uBlockSideLengthPower);
|
||||||
const uint16_t zOffset = uZPos - (blockZ << m_uBlockSideLengthPower);
|
const uint16_t zOffset = uZPos - (blockZ << m_uBlockSideLengthPower);
|
||||||
|
|
||||||
/*uint32_t uBlockIndex =
|
|
||||||
blockX +
|
|
||||||
blockY * m_uWidthInBlocks +
|
|
||||||
blockZ * m_uWidthInBlocks * m_uHeightInBlocks;
|
|
||||||
|
|
||||||
Block<VoxelType>& block = m_pBlocks[uBlockIndex];*/
|
|
||||||
|
|
||||||
Block<VoxelType>* pUncompressedBlock = getUncompressedBlock(blockX, blockY, blockZ);
|
Block<VoxelType>* pUncompressedBlock = getUncompressedBlock(blockX, blockY, blockZ);
|
||||||
|
|
||||||
pUncompressedBlock->setVoxelAt(xOffset,yOffset,zOffset, tValue);
|
pUncompressedBlock->setVoxelAt(xOffset,yOffset,zOffset, tValue);
|
||||||
@ -331,11 +315,8 @@ namespace PolyVox
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Clear the previous data
|
//Clear the previous data
|
||||||
delete[] m_pBlocks;
|
m_pBlocks.clear();
|
||||||
m_pBlocks = 0;
|
m_pUncompressedTimestamps.clear();
|
||||||
|
|
||||||
delete[] m_pUncompressedTimestamps;
|
|
||||||
m_pUncompressedTimestamps = 0;
|
|
||||||
|
|
||||||
//Compute the volume side lengths
|
//Compute the volume side lengths
|
||||||
m_uWidth = uWidth;
|
m_uWidth = uWidth;
|
||||||
@ -355,18 +336,16 @@ namespace PolyVox
|
|||||||
m_uNoOfBlocksInVolume = m_uWidthInBlocks * m_uHeightInBlocks * m_uDepthInBlocks;
|
m_uNoOfBlocksInVolume = m_uWidthInBlocks * m_uHeightInBlocks * m_uDepthInBlocks;
|
||||||
|
|
||||||
//Create the blocks
|
//Create the blocks
|
||||||
m_pBlocks = new Block<VoxelType>[m_uNoOfBlocksInVolume];
|
m_pBlocks.resize(m_uNoOfBlocksInVolume);
|
||||||
m_pUncompressedTimestamps = new uint32_t[m_uNoOfBlocksInVolume];
|
|
||||||
for(uint32_t i = 0; i < m_uNoOfBlocksInVolume; ++i)
|
for(uint32_t i = 0; i < m_uNoOfBlocksInVolume; ++i)
|
||||||
{
|
{
|
||||||
m_pBlocks[i].initialise(m_uBlockSideLength);
|
m_pBlocks[i].initialise(m_uBlockSideLength);
|
||||||
m_pUncompressedTimestamps[i] = 0; //Use memset/std::fill
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_pUncompressedTimestamps.resize(m_uNoOfBlocksInVolume);
|
||||||
|
std::fill(m_pUncompressedTimestamps.begin(), m_pUncompressedTimestamps.end(), 0);
|
||||||
|
|
||||||
//Create the border block
|
//Create the border block
|
||||||
/*m_pBorderBlock.initialise(uBlockSideLength);
|
|
||||||
Block<VoxelType>* pUncompressedBorderBlock = getUncompressedBlock(&m_pBorderBlock);
|
|
||||||
pUncompressedBorderBlock->fill(VoxelType());*/
|
|
||||||
m_pUncompressedBorderData = new VoxelType[m_uBlockSideLength * m_uBlockSideLength * m_uBlockSideLength];
|
m_pUncompressedBorderData = new VoxelType[m_uBlockSideLength * m_uBlockSideLength * m_uBlockSideLength];
|
||||||
std::fill(m_pUncompressedBorderData, m_pUncompressedBorderData + m_uBlockSideLength * m_uBlockSideLength * m_uBlockSideLength, VoxelType());
|
std::fill(m_pUncompressedBorderData, m_pUncompressedBorderData + m_uBlockSideLength * m_uBlockSideLength * m_uBlockSideLength, VoxelType());
|
||||||
|
|
||||||
@ -421,10 +400,8 @@ namespace PolyVox
|
|||||||
for(uint32_t ct = 0; ct < m_vecUncompressedBlockCache.size(); ct++)
|
for(uint32_t ct = 0; ct < m_vecUncompressedBlockCache.size(); ct++)
|
||||||
{
|
{
|
||||||
if(m_pUncompressedTimestamps[m_vecUncompressedBlockCache[ct].uBlockIndex] < uLeastRecentTimestamp)
|
if(m_pUncompressedTimestamps[m_vecUncompressedBlockCache[ct].uBlockIndex] < uLeastRecentTimestamp)
|
||||||
//if(m_pBlocks[m_vecUncompressedBlockCache[ct].uBlockIndex].m_uTimestamp < uLeastRecentTimestamp)
|
|
||||||
{
|
{
|
||||||
uLeastRecentTimestamp = m_pUncompressedTimestamps[m_vecUncompressedBlockCache[ct].uBlockIndex];
|
uLeastRecentTimestamp = m_pUncompressedTimestamps[m_vecUncompressedBlockCache[ct].uBlockIndex];
|
||||||
//uLeastRecentTimestamp = m_pBlocks[m_vecUncompressedBlockCache[ct].uBlockIndex].m_uTimestamp;
|
|
||||||
leastRecentlyUsedBlockIndex = ct;
|
leastRecentlyUsedBlockIndex = ct;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -457,11 +434,25 @@ namespace PolyVox
|
|||||||
template <typename VoxelType>
|
template <typename VoxelType>
|
||||||
uint32_t Volume<VoxelType>::sizeInBytes(void)
|
uint32_t Volume<VoxelType>::sizeInBytes(void)
|
||||||
{
|
{
|
||||||
uint32_t uSizeInBytes = 0;
|
uint32_t uSizeInBytes = sizeof(Volume);
|
||||||
|
|
||||||
|
//Memory used by the blocks
|
||||||
for(uint32_t i = 0; i < m_uNoOfBlocksInVolume; ++i)
|
for(uint32_t i = 0; i < m_uNoOfBlocksInVolume; ++i)
|
||||||
{
|
{
|
||||||
uSizeInBytes += m_pBlocks[i].sizeInBytes();
|
uSizeInBytes += m_pBlocks[i].sizeInBytes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Memory used by the block cache.
|
||||||
|
uSizeInBytes += m_vecUncompressedBlockCache.capacity() * sizeof(UncompressedBlock);
|
||||||
|
uSizeInBytes += m_vecUncompressedBlockCache.size() * m_uBlockSideLength * m_uBlockSideLength * m_uBlockSideLength * sizeof(VoxelType);
|
||||||
|
uSizeInBytes += m_pUncompressedTimestamps.capacity() * sizeof(uint32_t);
|
||||||
|
|
||||||
|
//Memory used by border data.
|
||||||
|
if(m_pUncompressedBorderData)
|
||||||
|
{
|
||||||
|
uSizeInBytes += m_uBlockSideLength * m_uBlockSideLength * m_uBlockSideLength * sizeof(VoxelType);
|
||||||
|
}
|
||||||
|
|
||||||
return uSizeInBytes;
|
return uSizeInBytes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -161,9 +161,6 @@ namespace PolyVox
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*Block<VoxelType>* pUncompressedBorderBlock = mVolume->getUncompressedBlock(&(mVolume->m_pBorderBlock));
|
|
||||||
mCurrentVoxel = pUncompressedBorderBlock->m_tUncompressedData + uVoxelIndexInBlock;*/
|
|
||||||
|
|
||||||
mCurrentVoxel = mVolume->m_pUncompressedBorderData + uVoxelIndexInBlock;
|
mCurrentVoxel = mVolume->m_pUncompressedBorderData + uVoxelIndexInBlock;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user