Moved contents of initialize() into constructor.
This commit is contained in:
		@@ -283,10 +283,6 @@ namespace PolyVox
 | 
			
		||||
		PagedVolume& operator=(const PagedVolume& rhs);
 | 
			
		||||
 | 
			
		||||
	private:	
 | 
			
		||||
 | 
			
		||||
		// FIXME - We can probably ove this into the constructor
 | 
			
		||||
		void initialise();
 | 
			
		||||
	
 | 
			
		||||
		std::shared_ptr<Chunk> getChunk(int32_t uChunkX, int32_t uChunkY, int32_t uChunkZ) const;
 | 
			
		||||
 | 
			
		||||
		void purgeNullPtrsFromAllChunks(void) const;
 | 
			
		||||
@@ -310,10 +306,10 @@ namespace PolyVox
 | 
			
		||||
		typedef std::unordered_map<Vector3DInt32, std::shared_ptr< Chunk > > SharedPtrChunkMap;
 | 
			
		||||
		mutable SharedPtrChunkMap m_pRecentlyUsedChunks;
 | 
			
		||||
 | 
			
		||||
		mutable uint32_t m_uTimestamper;
 | 
			
		||||
		mutable Vector3DInt32 m_v3dLastAccessedChunkPos;
 | 
			
		||||
		mutable std::shared_ptr<Chunk> m_pLastAccessedChunk;
 | 
			
		||||
		uint32_t m_uChunkCountLimit;
 | 
			
		||||
		mutable uint32_t m_uTimestamper = 0;
 | 
			
		||||
		mutable Vector3DInt32 m_v3dLastAccessedChunkPos = Vector3DInt32(0, 0, 0); //There are no invalid positions, but initially the m_pLastAccessedChunk pointer will be null
 | 
			
		||||
		mutable std::shared_ptr<Chunk> m_pLastAccessedChunk = nullptr;
 | 
			
		||||
		uint32_t m_uChunkCountLimit = 0;
 | 
			
		||||
 | 
			
		||||
		// The size of the volume
 | 
			
		||||
		//Region m_regValidRegionInChunks;
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,12 @@ namespace PolyVox
 | 
			
		||||
	{
 | 
			
		||||
		// Validation of parameters
 | 
			
		||||
		POLYVOX_THROW_IF(uTargetMemoryUsageInBytes < 1 * 1024 * 1024, std::invalid_argument, "Target memory usage is too small to be practical");
 | 
			
		||||
		POLYVOX_THROW_IF(uChunkSideLength > 256, std::invalid_argument, "Chunk size is too large to be practical");
 | 
			
		||||
		POLYVOX_THROW_IF(m_uChunkSideLength == 0, std::invalid_argument, "Chunk side length cannot be zero.");
 | 
			
		||||
		POLYVOX_THROW_IF(m_uChunkSideLength > 256, std::invalid_argument, "Chunk size is too large to be practical.");
 | 
			
		||||
		POLYVOX_THROW_IF(!isPowerOf2(m_uChunkSideLength), std::invalid_argument, "Chunk side length must be a power of two.");
 | 
			
		||||
 | 
			
		||||
		// Used to perform multiplications and divisions by bit shifting.
 | 
			
		||||
		m_uChunkSideLengthPower = logBase2(m_uChunkSideLength);
 | 
			
		||||
 | 
			
		||||
		// Calculate the number of chunks based on the memory limit and the size of each chunk.
 | 
			
		||||
		uint32_t uChunkSizeInBytes = PagedVolume<VoxelType>::Chunk::calculateSizeInBytes(m_uChunkSideLength);
 | 
			
		||||
@@ -59,8 +64,6 @@ namespace PolyVox
 | 
			
		||||
		// Inform the user about the chosen memory configuration.
 | 
			
		||||
		POLYVOX_LOG_DEBUG("Memory usage limit for volume now set to " << (m_uChunkCountLimit * uChunkSizeInBytes) / (1024 * 1024)
 | 
			
		||||
			<< "Mb (" << m_uChunkCountLimit << " chunks of " << uChunkSizeInBytes / 1024 << "Kb each).");
 | 
			
		||||
 | 
			
		||||
		initialise();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
@@ -73,7 +76,7 @@ namespace PolyVox
 | 
			
		||||
	template <typename VoxelType>
 | 
			
		||||
	PagedVolume<VoxelType>::PagedVolume(const PagedVolume<VoxelType>& /*rhs*/)
 | 
			
		||||
	{
 | 
			
		||||
		POLYVOX_THROW(not_implemented, "Volume copy constructor not implemented for performance reasons.");
 | 
			
		||||
		POLYVOX_THROW(not_implemented, "Volume copy constructor not implemented to prevent accidental copying.");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
@@ -265,43 +268,6 @@ namespace PolyVox
 | 
			
		||||
		purgeNullPtrsFromAllChunks();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
	/// This function should probably be made internal...
 | 
			
		||||
	////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
	template <typename VoxelType>
 | 
			
		||||
	void PagedVolume<VoxelType>::initialise()
 | 
			
		||||
	{		
 | 
			
		||||
		//Validate parameters
 | 
			
		||||
		if(m_uChunkSideLength == 0)
 | 
			
		||||
		{
 | 
			
		||||
			POLYVOX_THROW(std::invalid_argument, "Chunk side length cannot be zero.");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if(!isPowerOf2(m_uChunkSideLength))
 | 
			
		||||
		{
 | 
			
		||||
			POLYVOX_THROW(std::invalid_argument, "Chunk side length must be a power of two.");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		m_uTimestamper = 0;
 | 
			
		||||
		m_v3dLastAccessedChunkPos = Vector3DInt32(0,0,0); //There are no invalid positions, but initially the m_pLastAccessedChunk pointer will be null;
 | 
			
		||||
		m_pLastAccessedChunk = nullptr;
 | 
			
		||||
 | 
			
		||||
		//Compute the chunk side length
 | 
			
		||||
		m_uChunkSideLengthPower = logBase2(m_uChunkSideLength);
 | 
			
		||||
 | 
			
		||||
		/*m_regValidRegionInChunks.setLowerX(this->m_regValidRegion.getLowerX() >> m_uChunkSideLengthPower);
 | 
			
		||||
		m_regValidRegionInChunks.setLowerY(this->m_regValidRegion.getLowerY() >> m_uChunkSideLengthPower);
 | 
			
		||||
		m_regValidRegionInChunks.setLowerZ(this->m_regValidRegion.getLowerZ() >> m_uChunkSideLengthPower);
 | 
			
		||||
		m_regValidRegionInChunks.setUpperX(this->m_regValidRegion.getUpperX() >> m_uChunkSideLengthPower);
 | 
			
		||||
		m_regValidRegionInChunks.setUpperY(this->m_regValidRegion.getUpperY() >> m_uChunkSideLengthPower);
 | 
			
		||||
		m_regValidRegionInChunks.setUpperZ(this->m_regValidRegion.getUpperZ() >> m_uChunkSideLengthPower);*/
 | 
			
		||||
 | 
			
		||||
		//setMaxNumberOfChunks(m_uChunkCountLimit);
 | 
			
		||||
 | 
			
		||||
		//Clear the previous data
 | 
			
		||||
		m_pRecentlyUsedChunks.clear();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	template <typename VoxelType>
 | 
			
		||||
	std::shared_ptr<typename PagedVolume<VoxelType>::Chunk> PagedVolume<VoxelType>::getChunk(int32_t uChunkX, int32_t uChunkY, int32_t uChunkZ) const
 | 
			
		||||
	{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user