This commit is contained in:
David Williams 2011-02-07 23:47:48 +00:00
parent 42db69e013
commit 4da1f6149a
3 changed files with 17 additions and 49 deletions

View File

@ -469,7 +469,7 @@ int main(int argc, char *argv[])
openGLWidget.show();
//Create an empty volume and then place a sphere in it
Volume<MaterialDensityPair44> volData(1024, 1024, 1024);
Volume<MaterialDensityPair44> volData(256, 256, 256);
//createSphereInVolume(volData, 30);
createPerlinVolumeFast(volData);
@ -487,12 +487,12 @@ int main(int argc, char *argv[])
}*/
//Extract the surface
/*SurfaceMesh<PositionMaterialNormal> mesh;
SurfaceMesh<PositionMaterialNormal> mesh;
CubicSurfaceExtractorWithNormals<MaterialDensityPair44> surfaceExtractor(&volData, volData.getEnclosingRegion(), &mesh);
surfaceExtractor.execute();
//Pass the surface to the OpenGL window
openGLWidget.setSurfaceMeshToRender(mesh);*/
openGLWidget.setSurfaceMeshToRender(mesh);
//Run the message pump.
return app.exec();

View File

@ -120,7 +120,7 @@ namespace PolyVox
public:
///Constructor
Volume(uint16_t uWidth, uint16_t uHeight, uint16_t uDepth, uint16_t uBlockSideLength = 32);
Volume(uint16_t uWidth, uint16_t uHeight, uint16_t uDepth, uint16_t uBlockSideLength = 64);
///Destructor
~Volume();
@ -152,7 +152,7 @@ namespace PolyVox
///Sets the voxel at a 3D vector position
bool setVoxelAt(const Vector3DUint16& v3dPos, VoxelType tValue);
///Resises the volume to the specified dimensions
///Resizes the volume to the specified dimensions
void resize(uint16_t uWidth, uint16_t uHeight, uint16_t uDepth, uint16_t uBlockSideLength = 32);
public:
@ -160,8 +160,7 @@ namespace PolyVox
Block<VoxelType> m_pBorderBlock;
std::vector< Block<VoxelType> > m_pBlocks;
//mutable Block<VoxelType>* m_pUncompressedBlock;
mutable std::set<Block<VoxelType>*> m_pUncompressedBlocks;
mutable std::vector<Block<VoxelType>*> m_pUncompressedBlocks;
uint32_t m_uNoOfBlocksInVolume;

View File

@ -344,40 +344,6 @@ namespace PolyVox
m_fDiagonalLength = sqrtf(static_cast<float>(m_uWidth * m_uWidth + m_uHeight * m_uHeight + m_uDepth * m_uDepth));
}
/*template <typename VoxelType>
Block<VoxelType>* Volume<VoxelType>::getUncompressedBlock(Block<VoxelType>* block) const
{
if(block == m_pUncompressedBlock)
{
return m_pUncompressedBlock;
}
if(m_pUncompressedBlock)
{
m_pUncompressedBlock->compress();
}
m_pUncompressedBlock = block;
m_pUncompressedBlock->uncompress();
return m_pUncompressedBlock;
}*/
/*template <typename VoxelType>
Block<VoxelType>* Volume<VoxelType>::getUncompressedBlock(Block<VoxelType>* block) const
{
std::set<Block<VoxelType>*>::iterator iterBlock = m_pUncompressedBlocks.find(block);
if(iterBlock != m_pUncompressedBlocks.end())
{
return block;
}
block->uncompress();
m_pUncompressedBlocks.insert(block);
return block;
}*/
template <typename VoxelType>
Block<VoxelType>* Volume<VoxelType>::getUncompressedBlock(Block<VoxelType>* block) const
{
@ -391,23 +357,26 @@ namespace PolyVox
const uint32_t MaxUncompressedBlocks = 10;
if(m_pUncompressedBlocks.size() == MaxUncompressedBlocks)
{
Block<VoxelType>* pLeastRecentlyUsedBlock = 0;
int32_t leastRecentlyUsedBlockIndex = -1;
uint32_t uLeastRecentTimestamp = 1000000000000000;
for(std::set<Block<VoxelType>*>::iterator iter = m_pUncompressedBlocks.begin(); iter != m_pUncompressedBlocks.end(); iter++)
for(uint32_t ct = 0; ct < m_pUncompressedBlocks.size(); ct++)
{
if((*iter)->m_uTimestamp < uLeastRecentTimestamp)
if(m_pUncompressedBlocks[ct]->m_uTimestamp < uLeastRecentTimestamp)
{
uLeastRecentTimestamp = (*iter)->m_uTimestamp;
pLeastRecentlyUsedBlock = *iter;
uLeastRecentTimestamp = m_pUncompressedBlocks[ct]->m_uTimestamp;
leastRecentlyUsedBlockIndex = ct;
}
}
pLeastRecentlyUsedBlock->compress();
m_pUncompressedBlocks.erase(pLeastRecentlyUsedBlock);
m_pUncompressedBlocks[leastRecentlyUsedBlockIndex]->compress();
m_pUncompressedBlocks[leastRecentlyUsedBlockIndex] = block;
}
else
{
m_pUncompressedBlocks.push_back(block);
}
block->uncompress();
m_pUncompressedBlocks.insert(block);
return block;
}