Moved common code into function.
This commit is contained in:
parent
778238d11d
commit
b027cf1a0c
@ -280,7 +280,8 @@ namespace PolyVox
|
|||||||
/// Assignment operator
|
/// Assignment operator
|
||||||
PagedVolume& operator=(const PagedVolume& rhs);
|
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;
|
Chunk* getChunk(int32_t uChunkX, int32_t uChunkY, int32_t uChunkZ) const;
|
||||||
|
|
||||||
// Storing these properties individually has proved to be faster than keeping
|
// Storing these properties individually has proved to be faster than keeping
|
||||||
|
@ -123,18 +123,7 @@ namespace PolyVox
|
|||||||
const uint16_t yOffset = static_cast<uint16_t>(uYPos & m_iChunkMask);
|
const uint16_t yOffset = static_cast<uint16_t>(uYPos & m_iChunkMask);
|
||||||
const uint16_t zOffset = static_cast<uint16_t>(uZPos & m_iChunkMask);
|
const uint16_t zOffset = static_cast<uint16_t>(uZPos & m_iChunkMask);
|
||||||
|
|
||||||
Chunk* pChunk;
|
auto pChunk = canReuseLastAccessedChunk(chunkX, chunkY, chunkZ) ? m_pLastAccessedChunk : getChunk(chunkX, chunkY, chunkZ);
|
||||||
if ((chunkX == m_v3dLastAccessedChunkX) &&
|
|
||||||
(chunkY == m_v3dLastAccessedChunkY) &&
|
|
||||||
(chunkZ == m_v3dLastAccessedChunkZ) &&
|
|
||||||
(m_pLastAccessedChunk != 0))
|
|
||||||
{
|
|
||||||
pChunk = m_pLastAccessedChunk;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pChunk = getChunk(chunkX, chunkY, chunkZ);
|
|
||||||
}
|
|
||||||
|
|
||||||
return pChunk->getVoxel(xOffset, yOffset, zOffset);
|
return pChunk->getVoxel(xOffset, yOffset, zOffset);
|
||||||
}
|
}
|
||||||
@ -167,18 +156,7 @@ namespace PolyVox
|
|||||||
const uint16_t yOffset = static_cast<uint16_t>(uYPos - (chunkY << m_uChunkSideLengthPower));
|
const uint16_t yOffset = static_cast<uint16_t>(uYPos - (chunkY << m_uChunkSideLengthPower));
|
||||||
const uint16_t zOffset = static_cast<uint16_t>(uZPos - (chunkZ << m_uChunkSideLengthPower));
|
const uint16_t zOffset = static_cast<uint16_t>(uZPos - (chunkZ << m_uChunkSideLengthPower));
|
||||||
|
|
||||||
Chunk* pChunk;
|
auto pChunk = canReuseLastAccessedChunk(chunkX, chunkY, chunkZ) ? m_pLastAccessedChunk : getChunk(chunkX, chunkY, chunkZ);
|
||||||
if ((chunkX == m_v3dLastAccessedChunkX) &&
|
|
||||||
(chunkY == m_v3dLastAccessedChunkY) &&
|
|
||||||
(chunkZ == m_v3dLastAccessedChunkZ) &&
|
|
||||||
(m_pLastAccessedChunk != 0))
|
|
||||||
{
|
|
||||||
pChunk = m_pLastAccessedChunk;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pChunk = getChunk(chunkX, chunkY, chunkZ);
|
|
||||||
}
|
|
||||||
|
|
||||||
pChunk->setVoxel(xOffset, yOffset, zOffset, tValue);
|
pChunk->setVoxel(xOffset, yOffset, zOffset, tValue);
|
||||||
}
|
}
|
||||||
@ -280,6 +258,15 @@ namespace PolyVox
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename VoxelType>
|
||||||
|
bool PagedVolume<VoxelType>::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 VoxelType>
|
template <typename VoxelType>
|
||||||
typename PagedVolume<VoxelType>::Chunk* PagedVolume<VoxelType>::getChunk(int32_t uChunkX, int32_t uChunkY, int32_t uChunkZ) const
|
typename PagedVolume<VoxelType>::Chunk* PagedVolume<VoxelType>::getChunk(int32_t uChunkX, int32_t uChunkY, int32_t uChunkZ) const
|
||||||
{
|
{
|
||||||
|
@ -110,18 +110,8 @@ namespace PolyVox
|
|||||||
uYPosInChunk * this->mVolume->m_uChunkSideLength +
|
uYPosInChunk * this->mVolume->m_uChunkSideLength +
|
||||||
uZPosInChunk * this->mVolume->m_uChunkSideLength * this->mVolume->m_uChunkSideLength;
|
uZPosInChunk * this->mVolume->m_uChunkSideLength * this->mVolume->m_uChunkSideLength;
|
||||||
|
|
||||||
Chunk* pCurrentChunk;
|
auto pCurrentChunk = this->mVolume->canReuseLastAccessedChunk(uXChunk, uYChunk, uZChunk) ?
|
||||||
if ((uXChunk == this->mVolume->m_v3dLastAccessedChunkX) &&
|
this->mVolume->m_pLastAccessedChunk : this->mVolume->getChunk(uXChunk, uYChunk, uZChunk);
|
||||||
(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);
|
|
||||||
}
|
|
||||||
|
|
||||||
mCurrentVoxel = pCurrentChunk->m_tData + uVoxelIndexInChunk;
|
mCurrentVoxel = pCurrentChunk->m_tData + uVoxelIndexInChunk;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user