From bc28e240f390af4df6d55ecbdc9a4dbcd0575a72 Mon Sep 17 00:00:00 2001 From: David Williams Date: Sun, 20 Apr 2008 19:58:37 +0000 Subject: [PATCH] Templatized VolumeIterator class. --- CMakeLists.txt | 4 +- include/Block.h | 3 +- include/PolyVoxForwardDeclarations.h | 13 +- include/Volume.h | 2 +- include/Volume.inl | 5 +- include/VolumeIterator.h | 73 +++++----- .../VolumeIterator.inl | 135 ++++++++++++------ source/PolyVoxSceneManager.cpp | 10 +- 8 files changed, 140 insertions(+), 105 deletions(-) rename source/VolumeIterator.cpp => include/VolumeIterator.inl (81%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8bae641d..a8cf995b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/include/Block.h b/include/Block.h index fd0aa559..ae3628b6 100644 --- a/include/Block.h +++ b/include/Block.h @@ -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; //Block interface public: diff --git a/include/PolyVoxForwardDeclarations.h b/include/PolyVoxForwardDeclarations.h index 52b1e25c..2e32f51c 100644 --- a/include/PolyVoxForwardDeclarations.h +++ b/include/PolyVoxForwardDeclarations.h @@ -10,9 +10,6 @@ namespace PolyVox class IntegrealVector3; class PolyVoxSceneManager; class RegionGeometry; - //class SurfaceEdge; - //class SurfaceTriange; - //class SurfaceTypes; class SurfaceVertex; template 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 class Volume; - class VolumeIterator; + template class VolumeIterator; } #endif diff --git a/include/Volume.h b/include/Volume.h index 9e343b48..3fc830a5 100644 --- a/include/Volume.h +++ b/include/Volume.h @@ -32,7 +32,7 @@ namespace PolyVox class Volume { //Make VolumeIterator a friend - friend class VolumeIterator; + friend class VolumeIterator; //Volume interface public: diff --git a/include/Volume.inl b/include/Volume.inl index 2427f26b..06ebf5a2 100644 --- a/include/Volume.inl +++ b/include/Volume.inl @@ -22,7 +22,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include #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 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 volIter(*this); const boost::uint8_t uSeedValue = volIter.getVoxelAt(xStart,yStart,zStart); if(value == uSeedValue) diff --git a/include/VolumeIterator.h b/include/VolumeIterator.h index a0f7b915..41912e5c 100644 --- a/include/VolumeIterator.h +++ b/include/VolumeIterator.h @@ -27,17 +27,18 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. namespace PolyVox { - class POLYVOX_API VolumeIterator + template + class VolumeIterator { public: - VolumeIterator(Volume& volume); + VolumeIterator(Volume& 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& mVolume; + Volume& 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 diff --git a/source/VolumeIterator.cpp b/include/VolumeIterator.inl similarity index 81% rename from source/VolumeIterator.cpp rename to include/VolumeIterator.inl index 8a61345f..9e078299 100644 --- a/source/VolumeIterator.cpp +++ b/include/VolumeIterator.inl @@ -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& volume) + template + VolumeIterator::VolumeIterator(Volume& volume) :mVolume(volume) ,mXRegionFirst(0) ,mYRegionFirst(0) @@ -56,13 +56,15 @@ namespace PolyVox { } - VolumeIterator::~VolumeIterator() + template + VolumeIterator::~VolumeIterator() { } - void VolumeIterator::setVoxel(uint8_t value) + template + void VolumeIterator::setVoxel(VoxelType value) { - Block* currentBlock = mVolume.mBlocks[mBlockIndexInVolume]; + Block* currentBlock = mVolume.mBlocks[mBlockIndexInVolume]; /*if(!currentBlock.unique()) { @@ -75,13 +77,15 @@ namespace PolyVox *mCurrentVoxel = value; } - uint8_t VolumeIterator::getVoxel(void) + template + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + float VolumeIterator::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 + void VolumeIterator::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 + Vector3DFloat VolumeIterator::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 + Vector3DFloat VolumeIterator::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 + Vector3DFloat VolumeIterator::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 + uint16_t VolumeIterator::getPosX(void) { return mXPosInVolume; } - uint16_t VolumeIterator::getPosY(void) + template + uint16_t VolumeIterator::getPosY(void) { return mYPosInVolume; } - uint16_t VolumeIterator::getPosZ(void) + template + uint16_t VolumeIterator::getPosZ(void) { return mZPosInVolume; } - void VolumeIterator::setPosition(uint16_t xPos, uint16_t yPos, uint16_t zPos) + template + void VolumeIterator::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 + void VolumeIterator::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 + void VolumeIterator::moveForwardInRegion(void) { mXPosInBlock++; mCurrentVoxel++; @@ -445,12 +460,14 @@ namespace PolyVox } } - bool VolumeIterator::isValidForRegion(void) + template + bool VolumeIterator::isValidForRegion(void) { return mIsValidForRegion; } - uint8_t VolumeIterator::peekVoxel1nx1ny1nz(void) const + template + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::peekVoxel0px0py0pz(void) const { return *mCurrentVoxel; } - uint8_t VolumeIterator::peekVoxel0px0py1pz(void) const + template + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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 + VoxelType VolumeIterator::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)) { diff --git a/source/PolyVoxSceneManager.cpp b/source/PolyVoxSceneManager.cpp index dab1a082..ea24e1e2 100644 --- a/source/PolyVoxSceneManager.cpp +++ b/source/PolyVoxSceneManager.cpp @@ -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 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(); - VolumeIterator volIter(*volumeData); + VolumeIterator 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 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 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 volIter(*volumeData); return volIter.getVoxelAt(uX,uY,uZ); } else