Template class fixes.

This commit is contained in:
David Williams 2008-04-20 20:44:14 +00:00
parent bc28e240f3
commit efce9b8c95
5 changed files with 50 additions and 50 deletions

View File

@ -51,7 +51,7 @@ namespace PolyVox
VoxelType getVoxelAt(const boost::uint16_t xPosition, const boost::uint16_t yPosition, const boost::uint16_t zPosition) const; VoxelType getVoxelAt(const boost::uint16_t xPosition, const boost::uint16_t yPosition, const boost::uint16_t zPosition) const;
void setVoxelAt(const boost::uint16_t xPosition, const boost::uint16_t yPosition, const boost::uint16_t zPosition, const VoxelType value); void setVoxelAt(const boost::uint16_t xPosition, const boost::uint16_t yPosition, const boost::uint16_t zPosition, const VoxelType value);
//void fillWithValue(const uint8_t value); //void fillWithValue(const VoxelType value);
private: private:
VoxelType mData[POLYVOX_NO_OF_VOXELS_IN_BLOCK]; VoxelType mData[POLYVOX_NO_OF_VOXELS_IN_BLOCK];

View File

@ -73,14 +73,14 @@ namespace PolyVox
] = value; ] = value;
} }
/*void Block::fillWithValue(const uint8_t value) /*void Block::fillWithValue(const VoxelType value)
{ {
memset(mData,value,POLYVOX_NO_OF_VOXELS_IN_BLOCK); memset(mData,value,POLYVOX_NO_OF_VOXELS_IN_BLOCK);
}*/ }*/
/*bool Block::isHomogeneous(void) /*bool Block::isHomogeneous(void)
{ {
uint8_t uFirstVoxel = mData[0]; VoxelType uFirstVoxel = mData[0];
for(uint32_t ct = 1; ct < POLYVOX_NO_OF_VOXELS_IN_BLOCK; ++ct) for(uint32_t ct = 1; ct < POLYVOX_NO_OF_VOXELS_IN_BLOCK; ++ct)
{ {
if(mData[ct] != uFirstVoxel) if(mData[ct] != uFirstVoxel)

View File

@ -52,7 +52,7 @@ namespace PolyVox
bool loadFromFile(const std::string& sFilename); bool loadFromFile(const std::string& sFilename);
bool saveToFile(const std::string& sFilename); bool saveToFile(const std::string& sFilename);
void regionGrow(boost::uint16_t xStart, boost::uint16_t yStart, boost::uint16_t zStart, boost::uint8_t value); void regionGrow(boost::uint16_t xStart, boost::uint16_t yStart, boost::uint16_t zStart, VoxelType value);
void tidy(void); void tidy(void);
private: private:

View File

@ -85,7 +85,7 @@ namespace PolyVox
return *this; return *this;
} }
/*uint8_t Volume::getVoxelAt(const uint16_t xPosition, const uint16_t yPosition, const uint16_t zPosition) const /*VoxelType Volume::getVoxelAt(const uint16_t xPosition, const uint16_t yPosition, const uint16_t zPosition) const
{ {
const uint16_t blockX = xPosition >> POLYVOX_BLOCK_SIDE_LENGTH_POWER; const uint16_t blockX = xPosition >> POLYVOX_BLOCK_SIDE_LENGTH_POWER;
const uint16_t blockY = yPosition >> POLYVOX_BLOCK_SIDE_LENGTH_POWER; const uint16_t blockY = yPosition >> POLYVOX_BLOCK_SIDE_LENGTH_POWER;
@ -105,7 +105,7 @@ namespace PolyVox
return block->getVoxelAt(xOffset,yOffset,zOffset); return block->getVoxelAt(xOffset,yOffset,zOffset);
}*/ }*/
/*void Volume::setVoxelAt(const uint16_t xPosition, const uint16_t yPosition, const uint16_t zPosition, const uint8_t value) /*void Volume::setVoxelAt(const uint16_t xPosition, const uint16_t yPosition, const uint16_t zPosition, const VoxelType value)
{ {
const uint16_t blockX = xPosition >> POLYVOX_BLOCK_SIDE_LENGTH_POWER; const uint16_t blockX = xPosition >> POLYVOX_BLOCK_SIDE_LENGTH_POWER;
const uint16_t blockY = yPosition >> POLYVOX_BLOCK_SIDE_LENGTH_POWER; const uint16_t blockY = yPosition >> POLYVOX_BLOCK_SIDE_LENGTH_POWER;
@ -186,7 +186,7 @@ namespace PolyVox
{ {
for(uint16_t x = 0; x < POLYVOX_VOLUME_SIDE_LENGTH; ++x) for(uint16_t x = 0; x < POLYVOX_VOLUME_SIDE_LENGTH; ++x)
{ {
uint8_t value; VoxelType value;
file.read(reinterpret_cast<char*>(&value), sizeof(value)); //FIXME - check for error here file.read(reinterpret_cast<char*>(&value), sizeof(value)); //FIXME - check for error here
volIter.setVoxelAt(x,y,z,value); volIter.setVoxelAt(x,y,z,value);
} }
@ -235,7 +235,7 @@ namespace PolyVox
{ {
for(boost::uint16_t x = 0; x < POLYVOX_VOLUME_SIDE_LENGTH; ++x) for(boost::uint16_t x = 0; x < POLYVOX_VOLUME_SIDE_LENGTH; ++x)
{ {
boost::uint8_t value = volIter.getVoxelAt(x,y,z); VoxelType value = volIter.getVoxelAt(x,y,z);
file.write(reinterpret_cast<char*>(&value), sizeof(value)); //FIXME - check for error here file.write(reinterpret_cast<char*>(&value), sizeof(value)); //FIXME - check for error here
} }
} }
@ -244,7 +244,7 @@ namespace PolyVox
} }
template <typename VoxelType> template <typename VoxelType>
void Volume<VoxelType>::regionGrow(boost::uint16_t xStart, boost::uint16_t yStart, boost::uint16_t zStart, boost::uint8_t value) void Volume<VoxelType>::regionGrow(boost::uint16_t xStart, boost::uint16_t yStart, boost::uint16_t zStart, VoxelType value)
{ {
//FIXME - introduce integrer 'isInVolume' function //FIXME - introduce integrer 'isInVolume' function
if((xStart > POLYVOX_VOLUME_SIDE_LENGTH-1) || (yStart > POLYVOX_VOLUME_SIDE_LENGTH-1) || (zStart > POLYVOX_VOLUME_SIDE_LENGTH-1) if((xStart > POLYVOX_VOLUME_SIDE_LENGTH-1) || (yStart > POLYVOX_VOLUME_SIDE_LENGTH-1) || (zStart > POLYVOX_VOLUME_SIDE_LENGTH-1)
@ -255,7 +255,7 @@ namespace PolyVox
} }
VolumeIterator<VoxelType> volIter(*this); VolumeIterator<VoxelType> volIter(*this);
const boost::uint8_t uSeedValue = volIter.getVoxelAt(xStart,yStart,zStart); const VoxelType uSeedValue = volIter.getVoxelAt(xStart,yStart,zStart);
if(value == uSeedValue) if(value == uSeedValue)
{ {
@ -327,7 +327,7 @@ namespace PolyVox
{ {
//LogManager::getSingleton().logMessage("Got homogeneous block with value " + stringConverter::tostring(mBlocks[ct]->getVoxelAt(0,0,0))); //LogManager::getSingleton().logMessage("Got homogeneous block with value " + stringConverter::tostring(mBlocks[ct]->getVoxelAt(0,0,0)));
const uint8_t homogeneousValue = mBlocks[ct]->getVoxelAt(0,0,0); const VoxelType homogeneousValue = mBlocks[ct]->getVoxelAt(0,0,0);
SharedPtr<Block>& homogeneousBlock = mHomogeneousBlocks[homogeneousValue]; SharedPtr<Block>& homogeneousBlock = mHomogeneousBlocks[homogeneousValue];
if(homogeneousBlock.isNull()) if(homogeneousBlock.isNull())
{ {

View File

@ -95,7 +95,7 @@ namespace PolyVox
const uint16_t yOffset = yPosition - (blockY << POLYVOX_BLOCK_SIDE_LENGTH_POWER); const uint16_t yOffset = yPosition - (blockY << POLYVOX_BLOCK_SIDE_LENGTH_POWER);
const uint16_t zOffset = zPosition - (blockZ << POLYVOX_BLOCK_SIDE_LENGTH_POWER); const uint16_t zOffset = zPosition - (blockZ << POLYVOX_BLOCK_SIDE_LENGTH_POWER);
const Block<boost::uint8_t>* block = mVolume.mBlocks const Block<VoxelType>* block = mVolume.mBlocks
[ [
blockX + blockX +
blockY * POLYVOX_VOLUME_SIDE_LENGTH_IN_BLOCKS + blockY * POLYVOX_VOLUME_SIDE_LENGTH_IN_BLOCKS +
@ -141,7 +141,7 @@ namespace PolyVox
const uint16_t yOffset = yPosition - (blockY << POLYVOX_BLOCK_SIDE_LENGTH_POWER); const uint16_t yOffset = yPosition - (blockY << POLYVOX_BLOCK_SIDE_LENGTH_POWER);
const uint16_t zOffset = zPosition - (blockZ << POLYVOX_BLOCK_SIDE_LENGTH_POWER); const uint16_t zOffset = zPosition - (blockZ << POLYVOX_BLOCK_SIDE_LENGTH_POWER);
Block<boost::uint8_t>* block = mVolume.mBlocks Block<VoxelType>* block = mVolume.mBlocks
[ [
blockX + blockX +
blockY * POLYVOX_VOLUME_SIDE_LENGTH_IN_BLOCKS + blockY * POLYVOX_VOLUME_SIDE_LENGTH_IN_BLOCKS +
@ -172,14 +172,14 @@ namespace PolyVox
} }
//FIXME - bitwise way of doing this? //FIXME - bitwise way of doing this?
uint8_t voxel1nx = peekVoxel1nx0py0pz() > 0 ? 1: 0; VoxelType voxel1nx = peekVoxel1nx0py0pz() > 0 ? 1: 0;
uint8_t voxel1px = peekVoxel1px0py0pz() > 0 ? 1: 0; VoxelType voxel1px = peekVoxel1px0py0pz() > 0 ? 1: 0;
uint8_t voxel1ny = peekVoxel0px1ny0pz() > 0 ? 1: 0; VoxelType voxel1ny = peekVoxel0px1ny0pz() > 0 ? 1: 0;
uint8_t voxel1py = peekVoxel0px1py0pz() > 0 ? 1: 0; VoxelType voxel1py = peekVoxel0px1py0pz() > 0 ? 1: 0;
uint8_t voxel1nz = peekVoxel0px0py1nz() > 0 ? 1: 0; VoxelType voxel1nz = peekVoxel0px0py1nz() > 0 ? 1: 0;
uint8_t voxel1pz = peekVoxel0px0py1pz() > 0 ? 1: 0; VoxelType voxel1pz = peekVoxel0px0py1pz() > 0 ? 1: 0;
return Vector3DFloat(int(voxel1px) - int(voxel1nx),int(voxel1py) - int(voxel1ny),int(voxel1pz) - int(voxel1nz)); return Vector3DFloat(int(voxel1px) - int(voxel1nx),int(voxel1py) - int(voxel1ny),int(voxel1pz) - int(voxel1nz));
} }
@ -224,35 +224,35 @@ namespace PolyVox
static const int weights[3][3][3] = { { {2,3,2}, {3,6,3}, {2,3,2} }, { static const int weights[3][3][3] = { { {2,3,2}, {3,6,3}, {2,3,2} }, {
{3,6,3}, {6,0,6}, {3,6,3} }, { {2,3,2}, {3,6,3}, {2,3,2} } }; {3,6,3}, {6,0,6}, {3,6,3} }, { {2,3,2}, {3,6,3}, {2,3,2} } };
const uint8_t pVoxel1nx1ny1nz = peekVoxel1nx1ny1nz() > 0 ? 1: 0; const VoxelType pVoxel1nx1ny1nz = peekVoxel1nx1ny1nz() > 0 ? 1: 0;
const uint8_t pVoxel1nx1ny0pz = peekVoxel1nx1ny0pz() > 0 ? 1: 0; const VoxelType pVoxel1nx1ny0pz = peekVoxel1nx1ny0pz() > 0 ? 1: 0;
const uint8_t pVoxel1nx1ny1pz = peekVoxel1nx1ny1pz() > 0 ? 1: 0; const VoxelType pVoxel1nx1ny1pz = peekVoxel1nx1ny1pz() > 0 ? 1: 0;
const uint8_t pVoxel1nx0py1nz = peekVoxel1nx0py1nz() > 0 ? 1: 0; const VoxelType pVoxel1nx0py1nz = peekVoxel1nx0py1nz() > 0 ? 1: 0;
const uint8_t pVoxel1nx0py0pz = peekVoxel1nx0py0pz() > 0 ? 1: 0; const VoxelType pVoxel1nx0py0pz = peekVoxel1nx0py0pz() > 0 ? 1: 0;
const uint8_t pVoxel1nx0py1pz = peekVoxel1nx0py1pz() > 0 ? 1: 0; const VoxelType pVoxel1nx0py1pz = peekVoxel1nx0py1pz() > 0 ? 1: 0;
const uint8_t pVoxel1nx1py1nz = peekVoxel1nx1py1nz() > 0 ? 1: 0; const VoxelType pVoxel1nx1py1nz = peekVoxel1nx1py1nz() > 0 ? 1: 0;
const uint8_t pVoxel1nx1py0pz = peekVoxel1nx1py0pz() > 0 ? 1: 0; const VoxelType pVoxel1nx1py0pz = peekVoxel1nx1py0pz() > 0 ? 1: 0;
const uint8_t pVoxel1nx1py1pz = peekVoxel1nx1py1pz() > 0 ? 1: 0; const VoxelType pVoxel1nx1py1pz = peekVoxel1nx1py1pz() > 0 ? 1: 0;
const uint8_t pVoxel0px1ny1nz = peekVoxel0px1ny1nz() > 0 ? 1: 0; const VoxelType pVoxel0px1ny1nz = peekVoxel0px1ny1nz() > 0 ? 1: 0;
const uint8_t pVoxel0px1ny0pz = peekVoxel0px1ny0pz() > 0 ? 1: 0; const VoxelType pVoxel0px1ny0pz = peekVoxel0px1ny0pz() > 0 ? 1: 0;
const uint8_t pVoxel0px1ny1pz = peekVoxel0px1ny1pz() > 0 ? 1: 0; const VoxelType pVoxel0px1ny1pz = peekVoxel0px1ny1pz() > 0 ? 1: 0;
const uint8_t pVoxel0px0py1nz = peekVoxel0px0py1nz() > 0 ? 1: 0; const VoxelType pVoxel0px0py1nz = peekVoxel0px0py1nz() > 0 ? 1: 0;
//const uint8_t pVoxel0px0py0pz = peekVoxel0px0py0pz() > 0 ? 1: 0; //const VoxelType pVoxel0px0py0pz = peekVoxel0px0py0pz() > 0 ? 1: 0;
const uint8_t pVoxel0px0py1pz = peekVoxel0px0py1pz() > 0 ? 1: 0; const VoxelType pVoxel0px0py1pz = peekVoxel0px0py1pz() > 0 ? 1: 0;
const uint8_t pVoxel0px1py1nz = peekVoxel0px1py1nz() > 0 ? 1: 0; const VoxelType pVoxel0px1py1nz = peekVoxel0px1py1nz() > 0 ? 1: 0;
const uint8_t pVoxel0px1py0pz = peekVoxel0px1py0pz() > 0 ? 1: 0; const VoxelType pVoxel0px1py0pz = peekVoxel0px1py0pz() > 0 ? 1: 0;
const uint8_t pVoxel0px1py1pz = peekVoxel0px1py1pz() > 0 ? 1: 0; const VoxelType pVoxel0px1py1pz = peekVoxel0px1py1pz() > 0 ? 1: 0;
const uint8_t pVoxel1px1ny1nz = peekVoxel1px1ny1nz() > 0 ? 1: 0; const VoxelType pVoxel1px1ny1nz = peekVoxel1px1ny1nz() > 0 ? 1: 0;
const uint8_t pVoxel1px1ny0pz = peekVoxel1px1ny0pz() > 0 ? 1: 0; const VoxelType pVoxel1px1ny0pz = peekVoxel1px1ny0pz() > 0 ? 1: 0;
const uint8_t pVoxel1px1ny1pz = peekVoxel1px1ny1pz() > 0 ? 1: 0; const VoxelType pVoxel1px1ny1pz = peekVoxel1px1ny1pz() > 0 ? 1: 0;
const uint8_t pVoxel1px0py1nz = peekVoxel1px0py1nz() > 0 ? 1: 0; const VoxelType pVoxel1px0py1nz = peekVoxel1px0py1nz() > 0 ? 1: 0;
const uint8_t pVoxel1px0py0pz = peekVoxel1px0py0pz() > 0 ? 1: 0; const VoxelType pVoxel1px0py0pz = peekVoxel1px0py0pz() > 0 ? 1: 0;
const uint8_t pVoxel1px0py1pz = peekVoxel1px0py1pz() > 0 ? 1: 0; const VoxelType pVoxel1px0py1pz = peekVoxel1px0py1pz() > 0 ? 1: 0;
const uint8_t pVoxel1px1py1nz = peekVoxel1px1py1nz() > 0 ? 1: 0; const VoxelType pVoxel1px1py1nz = peekVoxel1px1py1nz() > 0 ? 1: 0;
const uint8_t pVoxel1px1py0pz = peekVoxel1px1py0pz() > 0 ? 1: 0; const VoxelType pVoxel1px1py0pz = peekVoxel1px1py0pz() > 0 ? 1: 0;
const uint8_t pVoxel1px1py1pz = peekVoxel1px1py1pz() > 0 ? 1: 0; const VoxelType pVoxel1px1py1pz = peekVoxel1px1py1pz() > 0 ? 1: 0;
@ -337,7 +337,7 @@ namespace PolyVox
mBlockIndexInVolume = mXBlock + mBlockIndexInVolume = mXBlock +
mYBlock * POLYVOX_VOLUME_SIDE_LENGTH_IN_BLOCKS + mYBlock * POLYVOX_VOLUME_SIDE_LENGTH_IN_BLOCKS +
mZBlock * POLYVOX_VOLUME_SIDE_LENGTH_IN_BLOCKS * POLYVOX_VOLUME_SIDE_LENGTH_IN_BLOCKS; mZBlock * POLYVOX_VOLUME_SIDE_LENGTH_IN_BLOCKS * POLYVOX_VOLUME_SIDE_LENGTH_IN_BLOCKS;
Block<boost::uint8_t>* currentBlock = mVolume.mBlocks[mBlockIndexInVolume]; Block<VoxelType>* currentBlock = mVolume.mBlocks[mBlockIndexInVolume];
mVoxelIndexInBlock = mXPosInBlock + mVoxelIndexInBlock = mXPosInBlock +
mYPosInBlock * POLYVOX_BLOCK_SIDE_LENGTH + mYPosInBlock * POLYVOX_BLOCK_SIDE_LENGTH +
@ -387,7 +387,7 @@ namespace PolyVox
mVoxelIndexInBlock = mXPosInBlock + mVoxelIndexInBlock = mXPosInBlock +
mYPosInBlock * POLYVOX_BLOCK_SIDE_LENGTH + mYPosInBlock * POLYVOX_BLOCK_SIDE_LENGTH +
mZPosInBlock * POLYVOX_BLOCK_SIDE_LENGTH * POLYVOX_BLOCK_SIDE_LENGTH; mZPosInBlock * POLYVOX_BLOCK_SIDE_LENGTH * POLYVOX_BLOCK_SIDE_LENGTH;
Block<boost::uint8_t>* currentBlock = mVolume.mBlocks[mBlockIndexInVolume]; Block<VoxelType>* currentBlock = mVolume.mBlocks[mBlockIndexInVolume];
mCurrentVoxel = currentBlock->mData + mVoxelIndexInBlock; mCurrentVoxel = currentBlock->mData + mVoxelIndexInBlock;
mYPosInBlock++; mYPosInBlock++;
@ -400,7 +400,7 @@ namespace PolyVox
mVoxelIndexInBlock = mXPosInBlock + mVoxelIndexInBlock = mXPosInBlock +
mYPosInBlock * POLYVOX_BLOCK_SIDE_LENGTH + mYPosInBlock * POLYVOX_BLOCK_SIDE_LENGTH +
mZPosInBlock * POLYVOX_BLOCK_SIDE_LENGTH * POLYVOX_BLOCK_SIDE_LENGTH; mZPosInBlock * POLYVOX_BLOCK_SIDE_LENGTH * POLYVOX_BLOCK_SIDE_LENGTH;
Block<boost::uint8_t>* currentBlock = mVolume.mBlocks[mBlockIndexInVolume]; Block<VoxelType>* currentBlock = mVolume.mBlocks[mBlockIndexInVolume];
mCurrentVoxel = currentBlock->mData + mVoxelIndexInBlock; mCurrentVoxel = currentBlock->mData + mVoxelIndexInBlock;
mZPosInBlock++; mZPosInBlock++;
@ -439,7 +439,7 @@ namespace PolyVox
} }
} }
Block<boost::uint8_t>* currentBlock = mVolume.mBlocks[mBlockIndexInVolume]; Block<VoxelType>* currentBlock = mVolume.mBlocks[mBlockIndexInVolume];
//mCurrentBlock = mVolume->mBlocks[mBlockIndexInVolume]; //mCurrentBlock = mVolume->mBlocks[mBlockIndexInVolume];
mXPosInVolume = (std::max)(mXRegionFirst,uint16_t(mXBlock * POLYVOX_BLOCK_SIDE_LENGTH)); mXPosInVolume = (std::max)(mXRegionFirst,uint16_t(mXBlock * POLYVOX_BLOCK_SIDE_LENGTH));