Moved the test for whether we are accessing the same voxel as last time.

This commit is contained in:
David Williams 2015-03-21 14:57:48 +01:00
parent d477bec540
commit 778238d11d
2 changed files with 40 additions and 5 deletions

View File

@ -123,7 +123,19 @@ 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);
auto pChunk = getChunk(chunkX, chunkY, chunkZ); Chunk* pChunk;
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);
} }
@ -155,7 +167,19 @@ 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));
auto pChunk = getChunk(chunkX, chunkY, chunkZ); Chunk* pChunk;
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);
} }
@ -263,13 +287,13 @@ namespace PolyVox
//the time stamp. If we updated it everytime then that would be every time we touched //the time stamp. If we updated it everytime then that would be every time we touched
//a voxel, which would overflow a uint32_t and require us to use a uint64_t instead. //a voxel, which would overflow a uint32_t and require us to use a uint64_t instead.
//This check should also provide a significant speed boost as usually it is true. //This check should also provide a significant speed boost as usually it is true.
if ((uChunkX == m_v3dLastAccessedChunkX) && /*if ((uChunkX == m_v3dLastAccessedChunkX) &&
(uChunkY == m_v3dLastAccessedChunkY) && (uChunkY == m_v3dLastAccessedChunkY) &&
(uChunkZ == m_v3dLastAccessedChunkZ) && (uChunkZ == m_v3dLastAccessedChunkZ) &&
(m_pLastAccessedChunk != 0)) (m_pLastAccessedChunk != 0))
{ {
return m_pLastAccessedChunk; return m_pLastAccessedChunk;
} }*/
Vector3DInt32 v3dChunkPos(uChunkX, uChunkY, uChunkZ); Vector3DInt32 v3dChunkPos(uChunkX, uChunkY, uChunkZ);

View File

@ -110,7 +110,18 @@ 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;
auto pCurrentChunk = this->mVolume->getChunk(uXChunk, uYChunk, uZChunk); 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);
}
mCurrentVoxel = pCurrentChunk->m_tData + uVoxelIndexInChunk; mCurrentVoxel = pCurrentChunk->m_tData + uVoxelIndexInChunk;
} }