diff --git a/library/PolyVoxCore/include/PolyVoxCore/LargeVolume.h b/library/PolyVoxCore/include/PolyVoxCore/LargeVolume.h index a87f2796..03b4ac01 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/LargeVolume.h +++ b/library/PolyVoxCore/include/PolyVoxCore/LargeVolume.h @@ -330,7 +330,7 @@ namespace PolyVox VoxelType getVoxelImpl(int32_t uXPos, int32_t uYPos, int32_t uZPos, WrapModeType, VoxelType tBorder) const; Block* getCompressedBlock(int32_t uBlockX, int32_t uBlockY, int32_t uBlockZ) const; - Block* getUncompressedBlock(int32_t uBlockX, int32_t uBlockY, int32_t uBlockZ) const; + VoxelType* getUncompressedBlock(int32_t uBlockX, int32_t uBlockY, int32_t uBlockZ) const; void eraseBlock(typename std::map, BlockPositionCompare>::iterator itBlock) const; // The block data @@ -344,7 +344,7 @@ namespace PolyVox mutable std::vector< Block* > m_vecBlocksWithUncompressedData; mutable uint32_t m_uTimestamper; mutable Vector3DInt32 m_v3dLastAccessedBlockPos; - mutable Block* m_pLastAccessedBlock; + mutable VoxelType* m_pLastAccessedBlock; uint32_t m_uMaxNumberOfUncompressedBlocks; uint32_t m_uCompressedBlockMemoryLimitInBytes; diff --git a/library/PolyVoxCore/include/PolyVoxCore/LargeVolume.inl b/library/PolyVoxCore/include/PolyVoxCore/LargeVolume.inl index 502ac706..794b283f 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/LargeVolume.inl +++ b/library/PolyVoxCore/include/PolyVoxCore/LargeVolume.inl @@ -223,7 +223,7 @@ namespace PolyVox const uint16_t yOffset = static_cast(uYPos - (blockY << m_uBlockSideLengthPower)); const uint16_t zOffset = static_cast(uZPos - (blockZ << m_uBlockSideLengthPower)); - VoxelType* pUncompressedBlock = getUncompressedBlock(blockX, blockY, blockZ)->m_tUncompressedData; + VoxelType* pUncompressedBlock = getUncompressedBlock(blockX, blockY, blockZ); return pUncompressedBlock [ @@ -317,7 +317,7 @@ namespace PolyVox const uint16_t yOffset = static_cast(uYPos - (blockY << m_uBlockSideLengthPower)); const uint16_t zOffset = static_cast(uZPos - (blockZ << m_uBlockSideLengthPower)); - VoxelType* pUncompressedBlock = getUncompressedBlock(blockX, blockY, blockZ)->m_tUncompressedData; + VoxelType* pUncompressedBlock = getUncompressedBlock(blockX, blockY, blockZ); pUncompressedBlock [ @@ -360,7 +360,7 @@ namespace PolyVox const uint16_t yOffset = static_cast(uYPos - (blockY << m_uBlockSideLengthPower)); const uint16_t zOffset = static_cast(uZPos - (blockZ << m_uBlockSideLengthPower)); - VoxelType* pUncompressedBlock = getUncompressedBlock(blockX, blockY, blockZ)->m_tUncompressedData; + VoxelType* pUncompressedBlock = getUncompressedBlock(blockX, blockY, blockZ); pUncompressedBlock [ @@ -629,14 +629,13 @@ namespace PolyVox //Get the block and mark that we accessed it Block& block = itBlock->second; block.timestamp = ++m_uTimestamper; - m_v3dLastAccessedBlockPos = v3dBlockPos; - m_pLastAccessedBlock = █ + //m_v3dLastAccessedBlockPos = v3dBlockPos; - return m_pLastAccessedBlock; + return █ } template - Block* LargeVolume::getUncompressedBlock(int32_t uBlockX, int32_t uBlockY, int32_t uBlockZ) const + VoxelType* LargeVolume::getUncompressedBlock(int32_t uBlockX, int32_t uBlockY, int32_t uBlockZ) const { Vector3DInt32 v3dBlockPos(uBlockX, uBlockY, uBlockZ); @@ -646,7 +645,6 @@ namespace PolyVox //This check should also provide a significant speed boost as usually it is true. if((v3dBlockPos == m_v3dLastAccessedBlockPos) && (m_pLastAccessedBlock != 0)) { - POLYVOX_ASSERT(m_pLastAccessedBlock->hasUncompressedData(), "Last accessed block has no uncompressed data."); return m_pLastAccessedBlock; } @@ -674,9 +672,12 @@ namespace PolyVox itUncompressedBlock = m_pUncompressedBlockCache.insert(std::make_pair(v3dBlockPos, pUncompressedBlock)).first; } + m_pLastAccessedBlock = block->m_tUncompressedData; + m_v3dLastAccessedBlockPos = v3dBlockPos; + if(block->hasUncompressedData()) { - return block; + return block->m_tUncompressedData; } //If we are allowed to compress then check whether we need to @@ -711,8 +712,8 @@ namespace PolyVox block->createUncompressedData(); - m_pLastAccessedBlock = block; - POLYVOX_ASSERT(m_pLastAccessedBlock->m_tUncompressedData, "Block has no uncompressed data"); + m_pLastAccessedBlock = block->m_tUncompressedData; + POLYVOX_ASSERT(m_pLastAccessedBlock, "Block has no uncompressed data"); return m_pLastAccessedBlock; } @@ -855,7 +856,7 @@ namespace PolyVox const uint16_t yOffset = static_cast(uYPos - (blockY << m_uBlockSideLengthPower)); const uint16_t zOffset = static_cast(uZPos - (blockZ << m_uBlockSideLengthPower)); - VoxelType* pUncompressedBlock = getUncompressedBlock(blockX, blockY, blockZ)->m_tUncompressedData; + VoxelType* pUncompressedBlock = getUncompressedBlock(blockX, blockY, blockZ); return pUncompressedBlock [ diff --git a/library/PolyVoxCore/include/PolyVoxCore/LargeVolumeSampler.inl b/library/PolyVoxCore/include/PolyVoxCore/LargeVolumeSampler.inl index dd61fcf0..d90ea5f4 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/LargeVolumeSampler.inl +++ b/library/PolyVoxCore/include/PolyVoxCore/LargeVolumeSampler.inl @@ -119,7 +119,7 @@ namespace PolyVox uYPosInBlock * this->mVolume->m_uBlockSideLength + uZPosInBlock * this->mVolume->m_uBlockSideLength * this->mVolume->m_uBlockSideLength; - VoxelType* pUncompressedCurrentBlock = this->mVolume->getUncompressedBlock(uXBlock, uYBlock, uZBlock)->m_tUncompressedData; + VoxelType* pUncompressedCurrentBlock = this->mVolume->getUncompressedBlock(uXBlock, uYBlock, uZBlock); mCurrentVoxel = pUncompressedCurrentBlock + uVoxelIndexInBlock; }