diff --git a/include/PolyVox/PagedVolume.h b/include/PolyVox/PagedVolume.h index 4e7d7fb2..c4e306ed 100644 --- a/include/PolyVox/PagedVolume.h +++ b/include/PolyVox/PagedVolume.h @@ -280,7 +280,8 @@ namespace PolyVox /// Assignment operator PagedVolume& operator=(const PagedVolume& rhs); - private: + private: + bool canReuseLastAccessedChunk(int32_t iChunkX, int32_t iChunkY, int32_t iChunkZ) const; Chunk* getChunk(int32_t uChunkX, int32_t uChunkY, int32_t uChunkZ) const; // Storing these properties individually has proved to be faster than keeping diff --git a/include/PolyVox/PagedVolume.inl b/include/PolyVox/PagedVolume.inl index 081e9b17..38d8dc91 100644 --- a/include/PolyVox/PagedVolume.inl +++ b/include/PolyVox/PagedVolume.inl @@ -123,18 +123,7 @@ namespace PolyVox const uint16_t yOffset = static_cast(uYPos & m_iChunkMask); const uint16_t zOffset = static_cast(uZPos & m_iChunkMask); - Chunk* pChunk; - if ((chunkX == m_v3dLastAccessedChunkX) && - (chunkY == m_v3dLastAccessedChunkY) && - (chunkZ == m_v3dLastAccessedChunkZ) && - (m_pLastAccessedChunk != 0)) - { - pChunk = m_pLastAccessedChunk; - } - else - { - pChunk = getChunk(chunkX, chunkY, chunkZ); - } + auto pChunk = canReuseLastAccessedChunk(chunkX, chunkY, chunkZ) ? m_pLastAccessedChunk : getChunk(chunkX, chunkY, chunkZ); return pChunk->getVoxel(xOffset, yOffset, zOffset); } @@ -167,18 +156,7 @@ namespace PolyVox const uint16_t yOffset = static_cast(uYPos - (chunkY << m_uChunkSideLengthPower)); const uint16_t zOffset = static_cast(uZPos - (chunkZ << m_uChunkSideLengthPower)); - Chunk* pChunk; - if ((chunkX == m_v3dLastAccessedChunkX) && - (chunkY == m_v3dLastAccessedChunkY) && - (chunkZ == m_v3dLastAccessedChunkZ) && - (m_pLastAccessedChunk != 0)) - { - pChunk = m_pLastAccessedChunk; - } - else - { - pChunk = getChunk(chunkX, chunkY, chunkZ); - } + auto pChunk = canReuseLastAccessedChunk(chunkX, chunkY, chunkZ) ? m_pLastAccessedChunk : getChunk(chunkX, chunkY, chunkZ); pChunk->setVoxel(xOffset, yOffset, zOffset, tValue); } @@ -280,6 +258,15 @@ namespace PolyVox } } + template + bool PagedVolume::canReuseLastAccessedChunk(int32_t iChunkX, int32_t iChunkY, int32_t iChunkZ) const + { + return ((iChunkX == m_v3dLastAccessedChunkX) && + (iChunkY == m_v3dLastAccessedChunkY) && + (iChunkZ == m_v3dLastAccessedChunkZ) && + (m_pLastAccessedChunk)); + } + template typename PagedVolume::Chunk* PagedVolume::getChunk(int32_t uChunkX, int32_t uChunkY, int32_t uChunkZ) const { diff --git a/include/PolyVox/PagedVolumeSampler.inl b/include/PolyVox/PagedVolumeSampler.inl index 71cb633a..8173bacc 100644 --- a/include/PolyVox/PagedVolumeSampler.inl +++ b/include/PolyVox/PagedVolumeSampler.inl @@ -110,18 +110,8 @@ namespace PolyVox uYPosInChunk * this->mVolume->m_uChunkSideLength + uZPosInChunk * this->mVolume->m_uChunkSideLength * this->mVolume->m_uChunkSideLength; - Chunk* pCurrentChunk; - if ((uXChunk == this->mVolume->m_v3dLastAccessedChunkX) && - (uYChunk == this->mVolume->m_v3dLastAccessedChunkY) && - (uZChunk == this->mVolume->m_v3dLastAccessedChunkZ) && - (this->mVolume->m_pLastAccessedChunk != 0)) - { - pCurrentChunk = this->mVolume->m_pLastAccessedChunk; - } - else - { - pCurrentChunk = this->mVolume->getChunk(uXChunk, uYChunk, uZChunk); - } + auto pCurrentChunk = this->mVolume->canReuseLastAccessedChunk(uXChunk, uYChunk, uZChunk) ? + this->mVolume->m_pLastAccessedChunk : this->mVolume->getChunk(uXChunk, uYChunk, uZChunk); mCurrentVoxel = pCurrentChunk->m_tData + uVoxelIndexInChunk; }