Split Block, CompressedBlock and UncompressedBlock into separate files. It's tidier, and maybe better for SWIG?
This commit is contained in:
parent
6f17e0faa6
commit
dcf86a905c
@ -49,8 +49,9 @@ SET(CORE_INC_FILES
|
|||||||
include/PolyVoxCore/BaseVolume.inl
|
include/PolyVoxCore/BaseVolume.inl
|
||||||
include/PolyVoxCore/BaseVolumeSampler.inl
|
include/PolyVoxCore/BaseVolumeSampler.inl
|
||||||
include/PolyVoxCore/Block.h
|
include/PolyVoxCore/Block.h
|
||||||
include/PolyVoxCore/Block.inl
|
|
||||||
include/PolyVoxCore/BlockCompressor.h
|
include/PolyVoxCore/BlockCompressor.h
|
||||||
|
include/PolyVoxCore/CompressedBlock.h
|
||||||
|
include/PolyVoxCore/CompressedBlock.inl
|
||||||
include/PolyVoxCore/Compressor.h
|
include/PolyVoxCore/Compressor.h
|
||||||
include/PolyVoxCore/CubicSurfaceExtractor.h
|
include/PolyVoxCore/CubicSurfaceExtractor.h
|
||||||
include/PolyVoxCore/CubicSurfaceExtractor.inl
|
include/PolyVoxCore/CubicSurfaceExtractor.inl
|
||||||
@ -95,6 +96,8 @@ SET(CORE_INC_FILES
|
|||||||
include/PolyVoxCore/SimpleVolumeSampler.inl
|
include/PolyVoxCore/SimpleVolumeSampler.inl
|
||||||
include/PolyVoxCore/SurfaceMesh.h
|
include/PolyVoxCore/SurfaceMesh.h
|
||||||
include/PolyVoxCore/SurfaceMesh.inl
|
include/PolyVoxCore/SurfaceMesh.inl
|
||||||
|
include/PolyVoxCore/UncompressedBlock.h
|
||||||
|
include/PolyVoxCore/UncompressedBlock.inl
|
||||||
include/PolyVoxCore/Vector.h
|
include/PolyVoxCore/Vector.h
|
||||||
include/PolyVoxCore/Vector.inl
|
include/PolyVoxCore/Vector.inl
|
||||||
include/PolyVoxCore/VertexTypes.h
|
include/PolyVoxCore/VertexTypes.h
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
Copyright (c) 2005-2009 David Williams
|
Copyright (c) 2005-2013 David Williams and Matthew Williams
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
warranty. In no event will the authors be held liable for any damages
|
||||||
@ -61,71 +61,6 @@ namespace PolyVox
|
|||||||
/// Private assignment operator to prevent accisdental copying
|
/// Private assignment operator to prevent accisdental copying
|
||||||
Block& operator=(const Block& /*rhs*/) {};
|
Block& operator=(const Block& /*rhs*/) {};
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename VoxelType>
|
|
||||||
class CompressedBlock : public Block<VoxelType>
|
|
||||||
{
|
|
||||||
friend class LargeVolume<VoxelType>;
|
|
||||||
|
|
||||||
public:
|
|
||||||
CompressedBlock();
|
|
||||||
~CompressedBlock();
|
|
||||||
|
|
||||||
const uint8_t* getData(void) const;
|
|
||||||
uint32_t getDataSizeInBytes(void) const;
|
|
||||||
|
|
||||||
void setData(const uint8_t* const pData, uint32_t uDataSizeInBytes);
|
|
||||||
|
|
||||||
private:
|
|
||||||
/// Private copy constructor to prevent accisdental copying
|
|
||||||
CompressedBlock(const CompressedBlock& /*rhs*/) {};
|
|
||||||
|
|
||||||
/// Private assignment operator to prevent accisdental copying
|
|
||||||
CompressedBlock& operator=(const CompressedBlock& /*rhs*/) {};
|
|
||||||
|
|
||||||
// Made this private to avoid any confusion with getDataSizeInBytes().
|
|
||||||
// Users shouldn't really need this for CompressedBlock anyway.
|
|
||||||
uint32_t calculateSizeInBytes(void);
|
|
||||||
|
|
||||||
uint8_t* m_pData;
|
|
||||||
uint32_t m_uDataSizeInBytes;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename VoxelType>
|
|
||||||
class UncompressedBlock : public Block<VoxelType>
|
|
||||||
{
|
|
||||||
friend class LargeVolume<VoxelType>;
|
|
||||||
|
|
||||||
public:
|
|
||||||
UncompressedBlock(uint16_t uSideLength);
|
|
||||||
~UncompressedBlock();
|
|
||||||
|
|
||||||
VoxelType* getData(void) const;
|
|
||||||
uint32_t getDataSizeInBytes(void) const;
|
|
||||||
|
|
||||||
VoxelType getVoxel(uint16_t uXPos, uint16_t uYPos, uint16_t uZPos) const;
|
|
||||||
VoxelType getVoxel(const Vector3DUint16& v3dPos) const;
|
|
||||||
|
|
||||||
void setVoxelAt(uint16_t uXPos, uint16_t uYPos, uint16_t uZPos, VoxelType tValue);
|
|
||||||
void setVoxelAt(const Vector3DUint16& v3dPos, VoxelType tValue);
|
|
||||||
|
|
||||||
private:
|
|
||||||
/// Private copy constructor to prevent accisdental copying
|
|
||||||
UncompressedBlock(const UncompressedBlock& /*rhs*/) {};
|
|
||||||
|
|
||||||
/// Private assignment operator to prevent accisdental copying
|
|
||||||
UncompressedBlock& operator=(const UncompressedBlock& /*rhs*/) {};
|
|
||||||
|
|
||||||
// Made this private for consistancy with CompressedBlock.
|
|
||||||
// Users shouldn't really need this for UncompressedBlock anyway.
|
|
||||||
uint32_t calculateSizeInBytes(void);
|
|
||||||
|
|
||||||
VoxelType* m_tData;
|
|
||||||
uint16_t m_uSideLength;
|
|
||||||
uint8_t m_uSideLengthPower;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "PolyVoxCore/Block.inl"
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -25,7 +25,8 @@ freely, subject to the following restrictions:
|
|||||||
#define __PolyVox_BlockCompressor_H__
|
#define __PolyVox_BlockCompressor_H__
|
||||||
|
|
||||||
#include "PolyVoxCore/PolyVoxForwardDeclarations.h"
|
#include "PolyVoxCore/PolyVoxForwardDeclarations.h"
|
||||||
#include "PolyVoxCore/Block.h"
|
#include "PolyVoxCore/CompressedBlock.h"
|
||||||
|
#include "PolyVoxCore/UncompressedBlock.h"
|
||||||
|
|
||||||
namespace PolyVox
|
namespace PolyVox
|
||||||
{
|
{
|
||||||
|
63
library/PolyVoxCore/include/PolyVoxCore/CompressedBlock.h
Normal file
63
library/PolyVoxCore/include/PolyVoxCore/CompressedBlock.h
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
Copyright (c) 2005-2013 David Williams and Matthew Williams
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
|
||||||
|
3. This notice may not be removed or altered from any source
|
||||||
|
distribution.
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __PolyVox_CompressedBlock_H__
|
||||||
|
#define __PolyVox_CompressedBlock_H__
|
||||||
|
|
||||||
|
#include "PolyVoxCore/Block.h"
|
||||||
|
|
||||||
|
namespace PolyVox
|
||||||
|
{
|
||||||
|
template <typename VoxelType>
|
||||||
|
class CompressedBlock : public Block<VoxelType>
|
||||||
|
{
|
||||||
|
friend class LargeVolume<VoxelType>;
|
||||||
|
|
||||||
|
public:
|
||||||
|
CompressedBlock();
|
||||||
|
~CompressedBlock();
|
||||||
|
|
||||||
|
const uint8_t* getData(void) const;
|
||||||
|
uint32_t getDataSizeInBytes(void) const;
|
||||||
|
|
||||||
|
void setData(const uint8_t* const pData, uint32_t uDataSizeInBytes);
|
||||||
|
|
||||||
|
private:
|
||||||
|
/// Private copy constructor to prevent accisdental copying
|
||||||
|
CompressedBlock(const CompressedBlock& /*rhs*/) {};
|
||||||
|
|
||||||
|
/// Private assignment operator to prevent accisdental copying
|
||||||
|
CompressedBlock& operator=(const CompressedBlock& /*rhs*/) {};
|
||||||
|
|
||||||
|
// Made this private to avoid any confusion with getDataSizeInBytes().
|
||||||
|
// Users shouldn't really need this for CompressedBlock anyway.
|
||||||
|
uint32_t calculateSizeInBytes(void);
|
||||||
|
|
||||||
|
uint8_t* m_pData;
|
||||||
|
uint32_t m_uDataSizeInBytes;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "PolyVoxCore/CompressedBlock.inl"
|
||||||
|
|
||||||
|
#endif
|
79
library/PolyVoxCore/include/PolyVoxCore/CompressedBlock.inl
Normal file
79
library/PolyVoxCore/include/PolyVoxCore/CompressedBlock.inl
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
Copyright (c) 2005-2013 David Williams and Matthew Williams
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
|
||||||
|
3. This notice may not be removed or altered from any source
|
||||||
|
distribution.
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
namespace PolyVox
|
||||||
|
{
|
||||||
|
template <typename VoxelType>
|
||||||
|
CompressedBlock<VoxelType>::CompressedBlock()
|
||||||
|
:m_pData(0)
|
||||||
|
,m_uDataSizeInBytes(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename VoxelType>
|
||||||
|
CompressedBlock<VoxelType>::~CompressedBlock()
|
||||||
|
{
|
||||||
|
delete[] m_pData;
|
||||||
|
m_pData = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename VoxelType>
|
||||||
|
const uint8_t* CompressedBlock<VoxelType>::getData(void) const
|
||||||
|
{
|
||||||
|
return m_pData;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename VoxelType>
|
||||||
|
uint32_t CompressedBlock<VoxelType>::getDataSizeInBytes(void) const
|
||||||
|
{
|
||||||
|
return m_uDataSizeInBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename VoxelType>
|
||||||
|
void CompressedBlock<VoxelType>::setData(const uint8_t* const pData, uint32_t uDataSizeInBytes)
|
||||||
|
{
|
||||||
|
POLYVOX_THROW_IF(pData == 0, std::invalid_argument, "Pointer to data cannot be null");
|
||||||
|
POLYVOX_THROW_IF(m_pData == pData, std::invalid_argument, "Attempting to copy data onto itself");
|
||||||
|
|
||||||
|
// Delete any existing data
|
||||||
|
delete[] m_pData;
|
||||||
|
|
||||||
|
// Allocate new data
|
||||||
|
m_uDataSizeInBytes = uDataSizeInBytes;
|
||||||
|
m_pData = new uint8_t[uDataSizeInBytes];
|
||||||
|
|
||||||
|
// Copy the data across
|
||||||
|
memcpy(m_pData, pData, uDataSizeInBytes);
|
||||||
|
|
||||||
|
// Flag as modified
|
||||||
|
this->m_bDataModified = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename VoxelType>
|
||||||
|
uint32_t CompressedBlock<VoxelType>::calculateSizeInBytes(void)
|
||||||
|
{
|
||||||
|
// Returns the size of this class plus the size of the compressed data.
|
||||||
|
uint32_t uSizeInBytes = sizeof(CompressedBlock<VoxelType>) + m_uDataSizeInBytes;
|
||||||
|
return uSizeInBytes;
|
||||||
|
}
|
||||||
|
}
|
@ -24,7 +24,7 @@ freely, subject to the following restrictions:
|
|||||||
#ifndef __PolyVox_Pager_H__
|
#ifndef __PolyVox_Pager_H__
|
||||||
#define __PolyVox_Pager_H__
|
#define __PolyVox_Pager_H__
|
||||||
|
|
||||||
#include "PolyVoxCore/Block.h"
|
#include "PolyVoxCore/CompressedBlock.h"
|
||||||
#include "PolyVoxCore/Impl/TypeDef.h"
|
#include "PolyVoxCore/Impl/TypeDef.h"
|
||||||
|
|
||||||
namespace PolyVox
|
namespace PolyVox
|
||||||
|
68
library/PolyVoxCore/include/PolyVoxCore/UncompressedBlock.h
Normal file
68
library/PolyVoxCore/include/PolyVoxCore/UncompressedBlock.h
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
Copyright (c) 2005-2013 David Williams and Matthew Williams
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
|
||||||
|
3. This notice may not be removed or altered from any source
|
||||||
|
distribution.
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __PolyVox_UncompressedBlock_H__
|
||||||
|
#define __PolyVox_UncompressedBlock_H__
|
||||||
|
|
||||||
|
#include "PolyVoxCore/Block.h"
|
||||||
|
|
||||||
|
namespace PolyVox
|
||||||
|
{
|
||||||
|
template <typename VoxelType>
|
||||||
|
class UncompressedBlock : public Block<VoxelType>
|
||||||
|
{
|
||||||
|
friend class LargeVolume<VoxelType>;
|
||||||
|
|
||||||
|
public:
|
||||||
|
UncompressedBlock(uint16_t uSideLength);
|
||||||
|
~UncompressedBlock();
|
||||||
|
|
||||||
|
VoxelType* getData(void) const;
|
||||||
|
uint32_t getDataSizeInBytes(void) const;
|
||||||
|
|
||||||
|
VoxelType getVoxel(uint16_t uXPos, uint16_t uYPos, uint16_t uZPos) const;
|
||||||
|
VoxelType getVoxel(const Vector3DUint16& v3dPos) const;
|
||||||
|
|
||||||
|
void setVoxelAt(uint16_t uXPos, uint16_t uYPos, uint16_t uZPos, VoxelType tValue);
|
||||||
|
void setVoxelAt(const Vector3DUint16& v3dPos, VoxelType tValue);
|
||||||
|
|
||||||
|
private:
|
||||||
|
/// Private copy constructor to prevent accisdental copying
|
||||||
|
UncompressedBlock(const UncompressedBlock& /*rhs*/) {};
|
||||||
|
|
||||||
|
/// Private assignment operator to prevent accisdental copying
|
||||||
|
UncompressedBlock& operator=(const UncompressedBlock& /*rhs*/) {};
|
||||||
|
|
||||||
|
// Made this private for consistancy with CompressedBlock.
|
||||||
|
// Users shouldn't really need this for UncompressedBlock anyway.
|
||||||
|
uint32_t calculateSizeInBytes(void);
|
||||||
|
|
||||||
|
VoxelType* m_tData;
|
||||||
|
uint16_t m_uSideLength;
|
||||||
|
uint8_t m_uSideLengthPower;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "PolyVoxCore/UncompressedBlock.inl"
|
||||||
|
|
||||||
|
#endif
|
@ -1,5 +1,5 @@
|
|||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
Copyright (c) 2005-2009 David Williams
|
Copyright (c) 2005-2013 David Williams and Matthew Williams
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
warranty. In no event will the authors be held liable for any damages
|
||||||
@ -9,90 +9,20 @@ Permission is granted to anyone to use this software for any purpose,
|
|||||||
including commercial applications, and to alter it and redistribute it
|
including commercial applications, and to alter it and redistribute it
|
||||||
freely, subject to the following restrictions:
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
claim that you wrote the original software. If you use this software
|
claim that you wrote the original software. If you use this software
|
||||||
in a product, an acknowledgment in the product documentation would be
|
in a product, an acknowledgment in the product documentation would be
|
||||||
appreciated but is not required.
|
appreciated but is not required.
|
||||||
|
|
||||||
2. Altered source versions must be plainly marked as such, and must not be
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
misrepresented as being the original software.
|
misrepresented as being the original software.
|
||||||
|
|
||||||
3. This notice may not be removed or altered from any source
|
3. This notice may not be removed or altered from any source
|
||||||
distribution.
|
distribution.
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
#include "PolyVoxCore/Impl/ErrorHandling.h"
|
|
||||||
#include "PolyVoxCore/Impl/Utility.h"
|
|
||||||
|
|
||||||
#include "PolyVoxCore/Compressor.h"
|
|
||||||
#include "PolyVoxCore/Vector.h"
|
|
||||||
|
|
||||||
#include "PolyVoxCore/Impl/ErrorHandling.h"
|
|
||||||
|
|
||||||
#include <cstring> //For memcpy
|
|
||||||
#include <limits>
|
|
||||||
#include <stdexcept> //for std::invalid_argument
|
|
||||||
|
|
||||||
namespace PolyVox
|
namespace PolyVox
|
||||||
{
|
{
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
template <typename VoxelType>
|
|
||||||
CompressedBlock<VoxelType>::CompressedBlock()
|
|
||||||
:m_pData(0)
|
|
||||||
,m_uDataSizeInBytes(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename VoxelType>
|
|
||||||
CompressedBlock<VoxelType>::~CompressedBlock()
|
|
||||||
{
|
|
||||||
delete[] m_pData;
|
|
||||||
m_pData = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename VoxelType>
|
|
||||||
const uint8_t* CompressedBlock<VoxelType>::getData(void) const
|
|
||||||
{
|
|
||||||
return m_pData;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename VoxelType>
|
|
||||||
uint32_t CompressedBlock<VoxelType>::getDataSizeInBytes(void) const
|
|
||||||
{
|
|
||||||
return m_uDataSizeInBytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename VoxelType>
|
|
||||||
void CompressedBlock<VoxelType>::setData(const uint8_t* const pData, uint32_t uDataSizeInBytes)
|
|
||||||
{
|
|
||||||
POLYVOX_THROW_IF(pData == 0, std::invalid_argument, "Pointer to data cannot be null");
|
|
||||||
POLYVOX_THROW_IF(m_pData == pData, std::invalid_argument, "Attempting to copy data onto itself");
|
|
||||||
|
|
||||||
// Delete any existing data
|
|
||||||
delete[] m_pData;
|
|
||||||
|
|
||||||
// Allocate new data
|
|
||||||
m_uDataSizeInBytes = uDataSizeInBytes;
|
|
||||||
m_pData = new uint8_t[uDataSizeInBytes];
|
|
||||||
|
|
||||||
// Copy the data across
|
|
||||||
memcpy(m_pData, pData, uDataSizeInBytes);
|
|
||||||
|
|
||||||
// Flag as modified
|
|
||||||
this->m_bDataModified = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename VoxelType>
|
|
||||||
uint32_t CompressedBlock<VoxelType>::calculateSizeInBytes(void)
|
|
||||||
{
|
|
||||||
// Returns the size of this class plus the size of the compressed data.
|
|
||||||
uint32_t uSizeInBytes = sizeof(CompressedBlock<VoxelType>) + m_uDataSizeInBytes;
|
|
||||||
return uSizeInBytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
template <typename VoxelType>
|
template <typename VoxelType>
|
||||||
UncompressedBlock<VoxelType>::UncompressedBlock(uint16_t uSideLength)
|
UncompressedBlock<VoxelType>::UncompressedBlock(uint16_t uSideLength)
|
||||||
:m_tData(0)
|
:m_tData(0)
|
Loading…
x
Reference in New Issue
Block a user