Work on removing obscure constants.

This commit is contained in:
David Williams 2008-04-26 22:01:29 +00:00
parent 1b592cd1fd
commit 1fa967fb9b
3 changed files with 35 additions and 14 deletions

View File

@ -36,7 +36,7 @@ namespace PolyVox
//Volume interface
public:
Volume();
Volume(boost::uint8_t uSideLengthPower, boost::uint8_t uBlockSideLengthPower);
~Volume();
private:
@ -51,7 +51,11 @@ namespace PolyVox
private:
Block<VoxelType>* getBlock(boost::uint16_t index);
Block<VoxelType>* mBlocks[POLYVOX_NO_OF_BLOCKS_IN_VOLUME];
Block<VoxelType>** mBlocks;
boost::uint32_t m_uNoOfBlocksInVolume;
boost::uint16_t m_uSideLengthPower;
boost::uint16_t m_uSideLength;
};
//Some handy typedefs

View File

@ -28,11 +28,28 @@ namespace PolyVox
{
template <typename VoxelType>
Volume<VoxelType>::Volume()
Volume<VoxelType>::Volume(boost::uint8_t uSideLengthPower, boost::uint8_t uBlockSideLengthPower)
{
for(boost::uint16_t i = 0; i < POLYVOX_NO_OF_BLOCKS_IN_VOLUME; ++i)
//Check the volume size is sensible. This corresponds to a side length of 65536 voxels
assert(uSideLengthPower <= 16);
//Compute the volume side length
m_uSideLengthPower = uSideLengthPower;
m_uSideLength = 0x01 << uSideLengthPower;
//Compute the block side length
boost::uint16_t uBlockSideLength = 0x01 << uBlockSideLengthPower;
//Compute the side length in blocks
boost::uint16_t uSideLengthInBlocks = m_uSideLength / uBlockSideLength;
//Compute number of blocks in the volume
m_uNoOfBlocksInVolume = uSideLengthInBlocks * uSideLengthInBlocks * uSideLengthInBlocks;
mBlocks = new Block<VoxelType>*[m_uNoOfBlocksInVolume];
for(boost::uint32_t i = 0; i < m_uNoOfBlocksInVolume; ++i)
{
mBlocks[i] = new Block<VoxelType>(POLYVOX_BLOCK_SIDE_LENGTH_POWER);
mBlocks[i] = new Block<VoxelType>(uBlockSideLengthPower);
}
}
@ -46,7 +63,7 @@ namespace PolyVox
template <typename VoxelType>
Volume<VoxelType>::~Volume()
{
for(boost::uint16_t i = 0; i < POLYVOX_NO_OF_BLOCKS_IN_VOLUME; ++i)
for(boost::uint32_t i = 0; i < m_uNoOfBlocksInVolume; ++i)
{
delete mBlocks[i];
}
@ -67,7 +84,7 @@ namespace PolyVox
mBlocks[i] = SharedPtr<Block>(new Block);
}*/
for(uint16_t i = 0; i < POLYVOX_NO_OF_BLOCKS_IN_VOLUME; ++i)
for(uint32_t i = 0; i < m_uNoOfBlocksInVolume; ++i)
{
//I think this is OK... If a block is in the homogeneous array it's ref count will be greater
//than 1 as there will be the pointer in the volume and the pointer in the static homogeneous array.
@ -94,9 +111,9 @@ namespace PolyVox
template <typename VoxelType>
bool Volume<VoxelType>::containsPoint(Vector3DFloat pos, float boundary)
{
return (pos.x() < POLYVOX_VOLUME_SIDE_LENGTH - 1 - boundary)
&& (pos.y() < POLYVOX_VOLUME_SIDE_LENGTH - 1 - boundary)
&& (pos.z() < POLYVOX_VOLUME_SIDE_LENGTH - 1 - boundary)
return (pos.x() < m_uSideLength - 1 - boundary)
&& (pos.y() < m_uSideLength - 1 - boundary)
&& (pos.z() < m_uSideLength - 1 - boundary)
&& (pos.x() > boundary)
&& (pos.y() > boundary)
&& (pos.z() > boundary);
@ -105,9 +122,9 @@ namespace PolyVox
template <typename VoxelType>
bool Volume<VoxelType>::containsPoint(Vector3DInt32 pos, boost::uint16_t boundary)
{
return (pos.x() < POLYVOX_VOLUME_SIDE_LENGTH - 1 - boundary)
&& (pos.y() < POLYVOX_VOLUME_SIDE_LENGTH - 1 - boundary)
&& (pos.z() < POLYVOX_VOLUME_SIDE_LENGTH - 1 - boundary)
return (pos.x() < m_uSideLength - 1 - boundary)
&& (pos.y() < m_uSideLength - 1 - boundary)
&& (pos.z() < m_uSideLength - 1 - boundary)
&& (pos.x() > boundary)
&& (pos.y() > boundary)
&& (pos.z() > boundary);

View File

@ -152,7 +152,7 @@ namespace PolyVox
void PolyVoxSceneManager::generateLevelVolume(void)
{
//volumeData = VolumePtr(new Volume);
volumeData = new Volume<boost::uint8_t>();
volumeData = new Volume<boost::uint8_t>(POLYVOX_VOLUME_SIDE_LENGTH_POWER, POLYVOX_BLOCK_SIDE_LENGTH_POWER);
VolumeIterator<boost::uint8_t> volIter(*volumeData);
for(uint16_t z = 0; z < POLYVOX_VOLUME_SIDE_LENGTH; ++z)
{