Added functions around CubicSurfaceExtractor.

This commit is contained in:
David Williams 2014-03-07 16:08:20 +01:00
parent d8bcd09d9b
commit 0bbb648925
2 changed files with 24 additions and 3 deletions

View File

@ -157,6 +157,28 @@ namespace PolyVox
WrapMode m_eWrapMode; WrapMode m_eWrapMode;
typename VolumeType::VoxelType m_tBorderValue; typename VolumeType::VoxelType m_tBorderValue;
}; };
template<typename VolumeType, typename IsQuadNeeded>
SurfaceMesh<PositionMaterial> extractCubicSurface(VolumeType* volData, Region region, WrapMode eWrapMode, typename VolumeType::VoxelType tBorderValue, bool bMergeQuads, IsQuadNeeded isQuadNeeded)
{
SurfaceMesh<PositionMaterial> result;
CubicSurfaceExtractor<VolumeType, IsQuadNeeded> extractor(volData, region, &result, eWrapMode, tBorderValue, bMergeQuads, isQuadNeeded);
extractor.execute();
return result;
}
template<typename VolumeType>
// This is a bit ugly - it seems that the C++03 syntax is different from the C++11 syntax? See this thread: http://stackoverflow.com/questions/6076015/typename-outside-of-template
// Long term we should probably come back to this and if the #ifdef is still needed then maybe it should check for C++11 mode instead of MSVC?
#if defined(_MSC_VER)
SurfaceMesh<PositionMaterial> extractCubicSurface(VolumeType* volData, Region region, WrapMode eWrapMode = WrapModes::Border, typename VolumeType::VoxelType tBorderValue = VolumeType::VoxelType(), bool bMergeQuads = true)
#else
SurfaceMesh<PositionMaterial> extractCubicSurface(VolumeType* volData, Region region, WrapMode eWrapMode = WrapModes::Border, typename VolumeType::VoxelType tBorderValue = typename VolumeType::VoxelType(), bool bMergeQuads = true)
#endif
{
DefaultIsQuadNeeded<typename VolumeType::VoxelType> isQuadNeeded;
return extractCubicSurface<VolumeType, DefaultIsQuadNeeded<typename VolumeType::VoxelType> >(volData, region, eWrapMode, tBorderValue, bMergeQuads, isQuadNeeded);
}
} }
#include "PolyVoxCore/CubicSurfaceExtractor.inl" #include "PolyVoxCore/CubicSurfaceExtractor.inl"

View File

@ -106,10 +106,9 @@ uint32_t testForType(void)
{ {
for (int32_t x = 0; x < uVolumeSideLength; x += uRegionSideLength) for (int32_t x = 0; x < uVolumeSideLength; x += uRegionSideLength)
{ {
SurfaceMesh<PositionMaterial> result;
Region regionToExtract(x, y, z, x + uRegionSideLength - 1, y + uRegionSideLength - 1, z + uRegionSideLength - 1); Region regionToExtract(x, y, z, x + uRegionSideLength - 1, y + uRegionSideLength - 1, z + uRegionSideLength - 1);
CubicSurfaceExtractor< SimpleVolume<VoxelType> > extractor(&volData, regionToExtract, &result);
extractor.execute(); auto result = extractCubicSurface(&volData, regionToExtract);
uTotalVertices += result.getNoOfVertices(); uTotalVertices += result.getNoOfVertices();
uTotalIndices += result.getNoOfIndices(); uTotalIndices += result.getNoOfIndices();