Templatized VolumeIterator class.

This commit is contained in:
David Williams 2008-04-20 19:58:37 +00:00
parent 593a26ebd2
commit bc28e240f3
8 changed files with 140 additions and 105 deletions

View File

@ -7,7 +7,6 @@ SET(SRC_FILES
source/PolyVoxSceneManager.cpp
source/RegionGeometry.cpp
source/SurfaceVertex.cpp
source/VolumeIterator.cpp
)
#Projects headers files
@ -26,7 +25,8 @@ SET(INC_FILES
include/Vector.inl
include/Volume.h
include/Volume.inl
include/VolumeIterator.h
include/VolumeIterator.h
include/VolumeIterator.inl
)
FIND_PACKAGE(Boost REQUIRED)

View File

@ -26,6 +26,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "boost/cstdint.hpp"
#include "Constants.h"
#include "PolyVoxForwardDeclarations.h"
#include "TypeDef.h"
#pragma endregion
@ -35,7 +36,7 @@ namespace PolyVox
class Block
{
//Make VolumeIterator a friend
friend class VolumeIterator;
friend class VolumeIterator<VoxelType>;
//Block interface
public:

View File

@ -10,9 +10,6 @@ namespace PolyVox
class IntegrealVector3;
class PolyVoxSceneManager;
class RegionGeometry;
//class SurfaceEdge;
//class SurfaceTriange;
//class SurfaceTypes;
class SurfaceVertex;
template <boost::uint32_t Size, typename Type> class Vector;
typedef Vector<2,float> Vector2DFloat;
@ -23,16 +20,8 @@ namespace PolyVox
typedef Vector<3,double> Vector3DDouble;
typedef Vector<3,boost::int32_t> Vector3DInt32;
typedef Vector<3,boost::uint32_t> Vector3DUint32;
/*class Vector2DFloat;
class Vector2DDouble;
class Vector2DInt32;
class Vector2DUint32;
class Vector3DFloat;
class Vector3DDouble;
class Vector3DInt32;
class Vector3DUint32;*/
template <typename VoxelType> class Volume;
class VolumeIterator;
template <typename VoxelType> class VolumeIterator;
}
#endif

View File

@ -32,7 +32,7 @@ namespace PolyVox
class Volume
{
//Make VolumeIterator a friend
friend class VolumeIterator;
friend class VolumeIterator<VoxelType>;
//Volume interface
public:

View File

@ -22,7 +22,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include <queue>
#include "Block.h"
#include "Volume.h"
#include "VolumeIterator.h" //Maybe this shouldn't be here?
namespace PolyVox
@ -229,7 +228,7 @@ namespace PolyVox
}
//Write data
VolumeIterator volIter(*this);
VolumeIterator<VoxelType> volIter(*this);
for(boost::uint16_t z = 0; z < POLYVOX_VOLUME_SIDE_LENGTH; ++z)
{
for(boost::uint16_t y = 0; y < POLYVOX_VOLUME_SIDE_LENGTH; ++y)
@ -255,7 +254,7 @@ namespace PolyVox
return;
}
VolumeIterator volIter(*this);
VolumeIterator<VoxelType> volIter(*this);
const boost::uint8_t uSeedValue = volIter.getVoxelAt(xStart,yStart,zStart);
if(value == uSeedValue)

View File

@ -27,17 +27,18 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
namespace PolyVox
{
class POLYVOX_API VolumeIterator
template <typename VoxelType>
class VolumeIterator
{
public:
VolumeIterator(Volume<boost::uint8_t>& volume);
VolumeIterator(Volume<VoxelType>& volume);
~VolumeIterator();
void setVoxel(boost::uint8_t value);
boost::uint8_t getVoxel(void);
void setVoxel(VoxelType value);
VoxelType getVoxel(void);
boost::uint8_t 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 boost::uint8_t value);
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);
float getAveragedVoxelAt(const boost::uint16_t xPosition, const boost::uint16_t yPosition, const boost::uint16_t zPosition, boost::uint16_t size) const;
@ -56,39 +57,39 @@ namespace PolyVox
bool isValidForRegion(void);
boost::uint8_t peekVoxel1nx1ny1nz(void) const;
boost::uint8_t peekVoxel1nx1ny0pz(void) const;
boost::uint8_t peekVoxel1nx1ny1pz(void) const;
boost::uint8_t peekVoxel1nx0py1nz(void) const;
boost::uint8_t peekVoxel1nx0py0pz(void) const;
boost::uint8_t peekVoxel1nx0py1pz(void) const;
boost::uint8_t peekVoxel1nx1py1nz(void) const;
boost::uint8_t peekVoxel1nx1py0pz(void) const;
boost::uint8_t peekVoxel1nx1py1pz(void) const;
VoxelType peekVoxel1nx1ny1nz(void) const;
VoxelType peekVoxel1nx1ny0pz(void) const;
VoxelType peekVoxel1nx1ny1pz(void) const;
VoxelType peekVoxel1nx0py1nz(void) const;
VoxelType peekVoxel1nx0py0pz(void) const;
VoxelType peekVoxel1nx0py1pz(void) const;
VoxelType peekVoxel1nx1py1nz(void) const;
VoxelType peekVoxel1nx1py0pz(void) const;
VoxelType peekVoxel1nx1py1pz(void) const;
boost::uint8_t peekVoxel0px1ny1nz(void) const;
boost::uint8_t peekVoxel0px1ny0pz(void) const;
boost::uint8_t peekVoxel0px1ny1pz(void) const;
boost::uint8_t peekVoxel0px0py1nz(void) const;
boost::uint8_t peekVoxel0px0py0pz(void) const;
boost::uint8_t peekVoxel0px0py1pz(void) const;
boost::uint8_t peekVoxel0px1py1nz(void) const;
boost::uint8_t peekVoxel0px1py0pz(void) const;
boost::uint8_t peekVoxel0px1py1pz(void) const;
VoxelType peekVoxel0px1ny1nz(void) const;
VoxelType peekVoxel0px1ny0pz(void) const;
VoxelType peekVoxel0px1ny1pz(void) const;
VoxelType peekVoxel0px0py1nz(void) const;
VoxelType peekVoxel0px0py0pz(void) const;
VoxelType peekVoxel0px0py1pz(void) const;
VoxelType peekVoxel0px1py1nz(void) const;
VoxelType peekVoxel0px1py0pz(void) const;
VoxelType peekVoxel0px1py1pz(void) const;
boost::uint8_t peekVoxel1px1ny1nz(void) const;
boost::uint8_t peekVoxel1px1ny0pz(void) const;
boost::uint8_t peekVoxel1px1ny1pz(void) const;
boost::uint8_t peekVoxel1px0py1nz(void) const;
boost::uint8_t peekVoxel1px0py0pz(void) const;
boost::uint8_t peekVoxel1px0py1pz(void) const;
boost::uint8_t peekVoxel1px1py1nz(void) const;
boost::uint8_t peekVoxel1px1py0pz(void) const;
boost::uint8_t peekVoxel1px1py1pz(void) const;
VoxelType peekVoxel1px1ny1nz(void) const;
VoxelType peekVoxel1px1ny0pz(void) const;
VoxelType peekVoxel1px1ny1pz(void) const;
VoxelType peekVoxel1px0py1nz(void) const;
VoxelType peekVoxel1px0py0pz(void) const;
VoxelType peekVoxel1px0py1pz(void) const;
VoxelType peekVoxel1px1py1nz(void) const;
VoxelType peekVoxel1px1py0pz(void) const;
VoxelType peekVoxel1px1py1pz(void) const;
private:
//The current volume
Volume<boost::uint8_t>& mVolume;
Volume<VoxelType>& mVolume;
//The current position in the volume
boost::uint16_t mXPosInVolume;
@ -106,7 +107,7 @@ namespace PolyVox
boost::uint16_t mZPosInBlock;
//Other current position information
boost::uint8_t* mCurrentVoxel;
VoxelType* mCurrentVoxel;
boost::uint32_t mBlockIndexInVolume;
boost::uint32_t mVoxelIndexInBlock;
@ -128,4 +129,6 @@ namespace PolyVox
};
}
#include "VolumeIterator.inl"
#endif

View File

@ -19,13 +19,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "block.h"
#include "Volume.h"
#include "VolumeIterator.h"
using namespace boost;
namespace PolyVox
{
VolumeIterator::VolumeIterator(Volume<boost::uint8_t>& volume)
template <typename VoxelType>
VolumeIterator<VoxelType>::VolumeIterator(Volume<VoxelType>& volume)
:mVolume(volume)
,mXRegionFirst(0)
,mYRegionFirst(0)
@ -56,13 +56,15 @@ namespace PolyVox
{
}
VolumeIterator::~VolumeIterator()
template <typename VoxelType>
VolumeIterator<VoxelType>::~VolumeIterator()
{
}
void VolumeIterator::setVoxel(uint8_t value)
template <typename VoxelType>
void VolumeIterator<VoxelType>::setVoxel(VoxelType value)
{
Block<boost::uint8_t>* currentBlock = mVolume.mBlocks[mBlockIndexInVolume];
Block<VoxelType>* currentBlock = mVolume.mBlocks[mBlockIndexInVolume];
/*if(!currentBlock.unique())
{
@ -75,13 +77,15 @@ namespace PolyVox
*mCurrentVoxel = value;
}
uint8_t VolumeIterator::getVoxel(void)
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::getVoxel(void)
{
//return getVoxelAt(mXPosInVolume,mYPosInVolume,mZPosInVolume);
return *mCurrentVoxel;
}
uint8_t VolumeIterator::getVoxelAt(const uint16_t xPosition, const uint16_t yPosition, const uint16_t zPosition) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::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 blockY = yPosition >> POLYVOX_BLOCK_SIDE_LENGTH_POWER;
@ -101,7 +105,8 @@ namespace PolyVox
return block->getVoxelAt(xOffset,yOffset,zOffset);
}
float VolumeIterator::getAveragedVoxelAt(const uint16_t xPosition, const uint16_t yPosition, const uint16_t zPosition, uint16_t size) const
template <typename VoxelType>
float VolumeIterator<VoxelType>::getAveragedVoxelAt(const uint16_t xPosition, const uint16_t yPosition, const uint16_t zPosition, uint16_t size) const
{
float sum = 0.0;
for(uint16_t z = zPosition-size; z <= zPosition+size; ++z)
@ -125,7 +130,8 @@ namespace PolyVox
return sum;
}
void VolumeIterator::setVoxelAt(const uint16_t xPosition, const uint16_t yPosition, const uint16_t zPosition, const uint8_t value)
template <typename VoxelType>
void VolumeIterator<VoxelType>::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 blockY = yPosition >> POLYVOX_BLOCK_SIDE_LENGTH_POWER;
@ -153,7 +159,8 @@ namespace PolyVox
block->setVoxelAt(xOffset,yOffset,zOffset, value);
}
Vector3DFloat VolumeIterator::getCentralDifferenceGradient(void) const
template <typename VoxelType>
Vector3DFloat VolumeIterator<VoxelType>::getCentralDifferenceGradient(void) const
{
//FIXME - should this test be here?
if((mXPosInVolume < 1) || (mXPosInVolume > POLYVOX_VOLUME_SIDE_LENGTH-2) ||
@ -177,7 +184,8 @@ namespace PolyVox
return Vector3DFloat(int(voxel1px) - int(voxel1nx),int(voxel1py) - int(voxel1ny),int(voxel1pz) - int(voxel1nz));
}
Vector3DFloat VolumeIterator::getAveragedCentralDifferenceGradient(void) const
template <typename VoxelType>
Vector3DFloat VolumeIterator<VoxelType>::getAveragedCentralDifferenceGradient(void) const
{
//FIXME - should this test be here?
if((mXPosInVolume < 2) || (mXPosInVolume > POLYVOX_VOLUME_SIDE_LENGTH-3) ||
@ -201,7 +209,8 @@ namespace PolyVox
return Vector3DFloat(voxel1px - voxel1nx,voxel1py - voxel1ny,voxel1pz - voxel1nz);
}
Vector3DFloat VolumeIterator::getSobelGradient(void) const
template <typename VoxelType>
Vector3DFloat VolumeIterator<VoxelType>::getSobelGradient(void) const
{
//FIXME - should this test be here?
if((mXPosInVolume < 1) || (mXPosInVolume > POLYVOX_VOLUME_SIDE_LENGTH-2) ||
@ -292,22 +301,26 @@ namespace PolyVox
return Vector3DFloat(xGrad,yGrad,zGrad);
}
uint16_t VolumeIterator::getPosX(void)
template <typename VoxelType>
uint16_t VolumeIterator<VoxelType>::getPosX(void)
{
return mXPosInVolume;
}
uint16_t VolumeIterator::getPosY(void)
template <typename VoxelType>
uint16_t VolumeIterator<VoxelType>::getPosY(void)
{
return mYPosInVolume;
}
uint16_t VolumeIterator::getPosZ(void)
template <typename VoxelType>
uint16_t VolumeIterator<VoxelType>::getPosZ(void)
{
return mZPosInVolume;
}
void VolumeIterator::setPosition(uint16_t xPos, uint16_t yPos, uint16_t zPos)
template <typename VoxelType>
void VolumeIterator<VoxelType>::setPosition(uint16_t xPos, uint16_t yPos, uint16_t zPos)
{
mXPosInVolume = xPos;
mYPosInVolume = yPos;
@ -333,7 +346,8 @@ namespace PolyVox
mCurrentVoxel = currentBlock->mData + mVoxelIndexInBlock;
}
void VolumeIterator::setValidRegion(uint16_t xFirst, uint16_t yFirst, uint16_t zFirst, uint16_t xLast, uint16_t yLast, uint16_t zLast)
template <typename VoxelType>
void VolumeIterator<VoxelType>::setValidRegion(uint16_t xFirst, uint16_t yFirst, uint16_t zFirst, uint16_t xLast, uint16_t yLast, uint16_t zLast)
{
mXRegionFirst = xFirst;
mYRegionFirst = yFirst;
@ -360,7 +374,8 @@ namespace PolyVox
mZRegionLastBlock = mZRegionLast >> POLYVOX_BLOCK_SIDE_LENGTH_POWER;
}
void VolumeIterator::moveForwardInRegion(void)
template <typename VoxelType>
void VolumeIterator<VoxelType>::moveForwardInRegion(void)
{
mXPosInBlock++;
mCurrentVoxel++;
@ -445,12 +460,14 @@ namespace PolyVox
}
}
bool VolumeIterator::isValidForRegion(void)
template <typename VoxelType>
bool VolumeIterator<VoxelType>::isValidForRegion(void)
{
return mIsValidForRegion;
}
uint8_t VolumeIterator::peekVoxel1nx1ny1nz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1nx1ny1nz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0) && (mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0) && (mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0))
{
@ -459,7 +476,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume-1,mYPosInVolume-1,mZPosInVolume-1);
}
uint8_t VolumeIterator::peekVoxel1nx1ny0pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1nx1ny0pz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0) && (mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0))
{
@ -468,7 +486,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume-1,mYPosInVolume-1,mZPosInVolume);
}
uint8_t VolumeIterator::peekVoxel1nx1ny1pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1nx1ny1pz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0) && (mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0) && (mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1))
{
@ -477,7 +496,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume-1,mYPosInVolume-1,mZPosInVolume+1);
}
uint8_t VolumeIterator::peekVoxel1nx0py1nz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1nx0py1nz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0) && (mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0))
{
@ -486,7 +506,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume-1,mYPosInVolume,mZPosInVolume-1);
}
uint8_t VolumeIterator::peekVoxel1nx0py0pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1nx0py0pz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0))
{
@ -495,7 +516,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume-1,mYPosInVolume,mZPosInVolume);
}
uint8_t VolumeIterator::peekVoxel1nx0py1pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1nx0py1pz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0) && (mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1))
{
@ -504,7 +526,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume-1,mYPosInVolume,mZPosInVolume+1);
}
uint8_t VolumeIterator::peekVoxel1nx1py1nz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1nx1py1nz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0) && (mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1) && (mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0))
{
@ -513,7 +536,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume-1,mYPosInVolume+1,mZPosInVolume-1);
}
uint8_t VolumeIterator::peekVoxel1nx1py0pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1nx1py0pz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0) && (mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1))
{
@ -522,7 +546,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume-1,mYPosInVolume+1,mZPosInVolume);
}
uint8_t VolumeIterator::peekVoxel1nx1py1pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1nx1py1pz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0) && (mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1) && (mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1))
{
@ -533,7 +558,8 @@ namespace PolyVox
//////////////////////////////////////////////////////////////////////////
uint8_t VolumeIterator::peekVoxel0px1ny1nz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel0px1ny1nz(void) const
{
if((mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0) && (mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0))
{
@ -542,7 +568,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume,mYPosInVolume-1,mZPosInVolume-1);
}
uint8_t VolumeIterator::peekVoxel0px1ny0pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel0px1ny0pz(void) const
{
if((mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0))
{
@ -551,7 +578,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume,mYPosInVolume-1,mZPosInVolume);
}
uint8_t VolumeIterator::peekVoxel0px1ny1pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel0px1ny1pz(void) const
{
if((mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0) && (mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1))
{
@ -560,7 +588,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume,mYPosInVolume-1,mZPosInVolume+1);
}
uint8_t VolumeIterator::peekVoxel0px0py1nz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel0px0py1nz(void) const
{
if((mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0))
{
@ -569,12 +598,14 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume,mYPosInVolume,mZPosInVolume-1);
}
uint8_t VolumeIterator::peekVoxel0px0py0pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel0px0py0pz(void) const
{
return *mCurrentVoxel;
}
uint8_t VolumeIterator::peekVoxel0px0py1pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel0px0py1pz(void) const
{
if((mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1))
{
@ -583,7 +614,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume,mYPosInVolume,mZPosInVolume+1);
}
uint8_t VolumeIterator::peekVoxel0px1py1nz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel0px1py1nz(void) const
{
if((mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1) && (mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0))
{
@ -592,7 +624,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume,mYPosInVolume+1,mZPosInVolume-1);
}
uint8_t VolumeIterator::peekVoxel0px1py0pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel0px1py0pz(void) const
{
if((mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1))
{
@ -601,7 +634,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume,mYPosInVolume+1,mZPosInVolume);
}
uint8_t VolumeIterator::peekVoxel0px1py1pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel0px1py1pz(void) const
{
if((mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1) && (mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1))
{
@ -612,7 +646,8 @@ namespace PolyVox
//////////////////////////////////////////////////////////////////////////
uint8_t VolumeIterator::peekVoxel1px1ny1nz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1px1ny1nz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1) && (mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0) && (mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0))
{
@ -621,7 +656,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume+1,mYPosInVolume-1,mZPosInVolume-1);
}
uint8_t VolumeIterator::peekVoxel1px1ny0pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1px1ny0pz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1) && (mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0))
{
@ -630,7 +666,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume+1,mYPosInVolume-1,mZPosInVolume);
}
uint8_t VolumeIterator::peekVoxel1px1ny1pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1px1ny1pz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1) && (mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0) && (mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1))
{
@ -639,7 +676,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume+1,mYPosInVolume-1,mZPosInVolume+1);
}
uint8_t VolumeIterator::peekVoxel1px0py1nz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1px0py1nz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1) && (mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0))
{
@ -648,7 +686,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume+1,mYPosInVolume,mZPosInVolume-1);
}
uint8_t VolumeIterator::peekVoxel1px0py0pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1px0py0pz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1))
{
@ -657,7 +696,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume+1,mYPosInVolume,mZPosInVolume);
}
uint8_t VolumeIterator::peekVoxel1px0py1pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1px0py1pz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1) && (mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1))
{
@ -666,7 +706,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume+1,mYPosInVolume,mZPosInVolume+1);
}
uint8_t VolumeIterator::peekVoxel1px1py1nz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1px1py1nz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1) && (mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1) && (mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != 0))
{
@ -675,7 +716,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume+1,mYPosInVolume+1,mZPosInVolume-1);
}
uint8_t VolumeIterator::peekVoxel1px1py0pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1px1py0pz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1) && (mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1))
{
@ -684,7 +726,8 @@ namespace PolyVox
return getVoxelAt(mXPosInVolume+1,mYPosInVolume+1,mZPosInVolume);
}
uint8_t VolumeIterator::peekVoxel1px1py1pz(void) const
template <typename VoxelType>
VoxelType VolumeIterator<VoxelType>::peekVoxel1px1py1pz(void) const
{
if((mXPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1) && (mYPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1) && (mZPosInVolume%POLYVOX_BLOCK_SIDE_LENGTH != POLYVOX_BLOCK_SIDE_LENGTH-1))
{

View File

@ -120,7 +120,7 @@ namespace PolyVox
lastY = std::min(lastY,int(POLYVOX_VOLUME_SIDE_LENGTH-1));
lastZ = std::min(lastZ,int(POLYVOX_VOLUME_SIDE_LENGTH-1));
VolumeIterator volIter(*volumeData);
VolumeIterator<boost::uint8_t> volIter(*volumeData);
volIter.setValidRegion(firstX,firstY,firstZ,lastX,lastY,lastZ);
volIter.setPosition(firstX,firstY,firstZ);
while(volIter.isValidForRegion())
@ -152,7 +152,7 @@ namespace PolyVox
{
//volumeData = VolumePtr(new Volume);
volumeData = new Volume<boost::uint8_t>();
VolumeIterator volIter(*volumeData);
VolumeIterator<boost::uint8_t> volIter(*volumeData);
for(uint16_t z = 0; z < POLYVOX_VOLUME_SIDE_LENGTH; ++z)
{
for(uint16_t y = 0; y < POLYVOX_VOLUME_SIDE_LENGTH; ++y)
@ -248,7 +248,7 @@ namespace PolyVox
Vector3DUint32 vertlist[12];
uint8_t vertMaterials[12];
VolumeIterator volIter(*volumeData);
VolumeIterator<boost::uint8_t> volIter(*volumeData);
volIter.setValidRegion(firstX,firstY,firstZ,lastX,lastY,lastZ);
//////////////////////////////////////////////////////////////////////////
@ -541,7 +541,7 @@ namespace PolyVox
Vector3DFloat PolyVoxSceneManager::computeNormal(const Vector3DFloat& position, NormalGenerationMethod normalGenerationMethod) const
{
VolumeIterator volIter(*volumeData); //FIXME - save this somewhere - could be expensive to create?
VolumeIterator<boost::uint8_t> volIter(*volumeData); //FIXME - save this somewhere - could be expensive to create?
const float posX = position.x();
const float posY = position.y();
@ -695,7 +695,7 @@ namespace PolyVox
{
if(volumeData->containsPoint(Vector3DInt32(uX,uY,uZ),0))
{
VolumeIterator volIter(*volumeData);
VolumeIterator<boost::uint8_t> volIter(*volumeData);
return volIter.getVoxelAt(uX,uY,uZ);
}
else