Made CubicSurfaceExtractor work with different volume types.

This commit is contained in:
David Williams
2011-05-01 16:43:33 +01:00
parent 2e2a2c694c
commit 27968973a4
2 changed files with 12 additions and 12 deletions

View File

@ -38,11 +38,11 @@ namespace PolyVox
int32_t uMaterial : 8; int32_t uMaterial : 8;
}; };
template <typename VoxelType> template< template<typename> class VolumeType, typename VoxelType>
class CubicSurfaceExtractor class CubicSurfaceExtractor
{ {
public: public:
CubicSurfaceExtractor(LargeVolume<VoxelType>* volData, Region region, SurfaceMesh<PositionMaterial>* result); CubicSurfaceExtractor(VolumeType<VoxelType>* volData, Region region, SurfaceMesh<PositionMaterial>* result);
void execute(); void execute();
@ -50,8 +50,8 @@ namespace PolyVox
private: private:
//The volume data and a sampler to access it. //The volume data and a sampler to access it.
LargeVolume<VoxelType>* m_volData; VolumeType<VoxelType>* m_volData;
typename LargeVolume<VoxelType>::Sampler m_sampVolume; typename VolumeType<VoxelType>::Sampler m_sampVolume;
//Information about the region we are currently processing //Information about the region we are currently processing
Region m_regSizeInVoxels; Region m_regSizeInVoxels;

View File

@ -29,11 +29,11 @@ freely, subject to the following restrictions:
namespace PolyVox namespace PolyVox
{ {
template <typename VoxelType> template< template<typename> class VolumeType, typename VoxelType>
const uint32_t CubicSurfaceExtractor<VoxelType>::MaxQuadsSharingVertex = 4; const uint32_t CubicSurfaceExtractor<VolumeType, VoxelType>::MaxQuadsSharingVertex = 4;
template <typename VoxelType> template< template<typename> class VolumeType, typename VoxelType>
CubicSurfaceExtractor<VoxelType>::CubicSurfaceExtractor(LargeVolume<VoxelType>* volData, Region region, SurfaceMesh<PositionMaterial>* result) CubicSurfaceExtractor<VolumeType, VoxelType>::CubicSurfaceExtractor(VolumeType<VoxelType>* volData, Region region, SurfaceMesh<PositionMaterial>* result)
:m_volData(volData) :m_volData(volData)
,m_sampVolume(volData) ,m_sampVolume(volData)
,m_regSizeInVoxels(region) ,m_regSizeInVoxels(region)
@ -42,8 +42,8 @@ namespace PolyVox
m_meshCurrent->clear(); m_meshCurrent->clear();
} }
template <typename VoxelType> template< template<typename> class VolumeType, typename VoxelType>
void CubicSurfaceExtractor<VoxelType>::execute() void CubicSurfaceExtractor<VolumeType, VoxelType>::execute()
{ {
uint32_t uArrayWidth = m_regSizeInVoxels.getUpperCorner().getX() - m_regSizeInVoxels.getLowerCorner().getX() + 2; uint32_t uArrayWidth = m_regSizeInVoxels.getUpperCorner().getX() - m_regSizeInVoxels.getLowerCorner().getX() + 2;
uint32_t uArrayHeight = m_regSizeInVoxels.getUpperCorner().getY() - m_regSizeInVoxels.getLowerCorner().getY() + 2; uint32_t uArrayHeight = m_regSizeInVoxels.getUpperCorner().getY() - m_regSizeInVoxels.getLowerCorner().getY() + 2;
@ -175,8 +175,8 @@ namespace PolyVox
m_meshCurrent->m_vecLodRecords.push_back(lodRecord); m_meshCurrent->m_vecLodRecords.push_back(lodRecord);
} }
template <typename VoxelType> template< template<typename> class VolumeType, typename VoxelType>
int32_t CubicSurfaceExtractor<VoxelType>::addVertex(float fX, float fY, float fZ, uint8_t uMaterialIn, Array<3, IndexAndMaterial>& existingVertices) int32_t CubicSurfaceExtractor<VolumeType, VoxelType>::addVertex(float fX, float fY, float fZ, uint8_t uMaterialIn, Array<3, IndexAndMaterial>& existingVertices)
{ {
uint32_t uX = static_cast<uint32_t>(fX + 0.75f); uint32_t uX = static_cast<uint32_t>(fX + 0.75f);
uint32_t uY = static_cast<uint32_t>(fY + 0.75f); uint32_t uY = static_cast<uint32_t>(fY + 0.75f);