From fcefe271926183b66e8393f2aea418e979dbda9b Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 7 Jun 2012 16:56:54 +0200 Subject: [PATCH] Removed use of template template parameters from VolumeResampler. --- examples/SmoothLOD/main.cpp | 2 +- .../include/PolyVoxCore/VolumeResampler.h | 8 +-- .../include/PolyVoxCore/VolumeResampler.inl | 59 ++++++++++--------- 3 files changed, 36 insertions(+), 33 deletions(-) diff --git a/examples/SmoothLOD/main.cpp b/examples/SmoothLOD/main.cpp index 4a5c1481..e788980c 100644 --- a/examples/SmoothLOD/main.cpp +++ b/examples/SmoothLOD/main.cpp @@ -93,7 +93,7 @@ int main(int argc, char *argv[]) RawVolume volDataLowLOD(PolyVox::Region(Vector3DInt32(0,0,0), Vector3DInt32(15, 31, 31))); - VolumeResampler volumeResampler(&volData, PolyVox::Region(Vector3DInt32(0,0,0), Vector3DInt32(31, 63, 63)), &volDataLowLOD, volDataLowLOD.getEnclosingRegion()); + VolumeResampler< SimpleVolume, RawVolume > volumeResampler(&volData, PolyVox::Region(Vector3DInt32(0,0,0), Vector3DInt32(31, 63, 63)), &volDataLowLOD, volDataLowLOD.getEnclosingRegion()); volumeResampler.execute(); //Extract the surface diff --git a/library/PolyVoxCore/include/PolyVoxCore/VolumeResampler.h b/library/PolyVoxCore/include/PolyVoxCore/VolumeResampler.h index f223f41b..eba82625 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/VolumeResampler.h +++ b/library/PolyVoxCore/include/PolyVoxCore/VolumeResampler.h @@ -28,11 +28,11 @@ freely, subject to the following restrictions: namespace PolyVox { - template< template class SrcVolumeType, template class DestVolumeType, typename VoxelType> + template< typename SrcVolumeType, typename DestVolumeType> class VolumeResampler { public: - VolumeResampler(SrcVolumeType* pVolSrc, Region regSrc, DestVolumeType* pVolDst, Region regDst); + VolumeResampler(SrcVolumeType* pVolSrc, Region regSrc, DestVolumeType* pVolDst, Region regDst); void execute(); @@ -41,11 +41,11 @@ namespace PolyVox void resampleArbitrary(); //Source data - SrcVolumeType* m_pVolSrc; + SrcVolumeType* m_pVolSrc; Region m_regSrc; //Destination data - DestVolumeType* m_pVolDst; + DestVolumeType* m_pVolDst; Region m_regDst; }; diff --git a/library/PolyVoxCore/include/PolyVoxCore/VolumeResampler.inl b/library/PolyVoxCore/include/PolyVoxCore/VolumeResampler.inl index 2d030adf..7322973f 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/VolumeResampler.inl +++ b/library/PolyVoxCore/include/PolyVoxCore/VolumeResampler.inl @@ -25,8 +25,8 @@ freely, subject to the following restrictions: namespace PolyVox { - template< template class SrcVolumeType, template class DestVolumeType, typename VoxelType> - VolumeResampler::VolumeResampler(SrcVolumeType* pVolSrc, Region regSrc, DestVolumeType* pVolDst, Region regDst) + template< typename SrcVolumeType, typename DestVolumeType> + VolumeResampler::VolumeResampler(SrcVolumeType* pVolSrc, Region regSrc, DestVolumeType* pVolDst, Region regDst) :m_pVolSrc(pVolSrc) ,m_regSrc(regSrc) ,m_pVolDst(pVolDst) @@ -34,8 +34,8 @@ namespace PolyVox { } - template< template class SrcVolumeType, template class DestVolumeType, typename VoxelType> - void VolumeResampler::execute() + template< typename SrcVolumeType, typename DestVolumeType> + void VolumeResampler::execute() { int32_t uSrcWidth = m_regSrc.getUpperCorner().getX() - m_regSrc.getLowerCorner().getX() + 1; int32_t uSrcHeight = m_regSrc.getUpperCorner().getY() - m_regSrc.getLowerCorner().getY() + 1; @@ -55,8 +55,8 @@ namespace PolyVox } } - template< template class SrcVolumeType, template class DestVolumeType, typename VoxelType> - void VolumeResampler::resampleSameSize() + template< typename SrcVolumeType, typename DestVolumeType> + void VolumeResampler::resampleSameSize() { for(int32_t sz = m_regSrc.getLowerCorner().getZ(), dz = m_regDst.getLowerCorner().getZ(); dz <= m_regDst.getUpperCorner().getZ(); sz++, dz++) { @@ -64,15 +64,16 @@ namespace PolyVox { for(int32_t sx = m_regSrc.getLowerCorner().getX(), dx = m_regDst.getLowerCorner().getX(); dx <= m_regDst.getUpperCorner().getX(); sx++,dx++) { - VoxelType voxel = m_pVolSrc->getVoxelAt(sx,sy,sz); + //Note: Consider what should happen if src and dest have different voxel types. + SrcVolumeType::VoxelType voxel = m_pVolSrc->getVoxelAt(sx,sy,sz); m_pVolDst->setVoxelAt(dx,dy,dz,voxel); } } } } - template< template class SrcVolumeType, template class DestVolumeType, typename VoxelType> - void VolumeResampler::resampleArbitrary() + template< typename SrcVolumeType, typename DestVolumeType> + void VolumeResampler::resampleArbitrary() { float srcWidth = m_regSrc.getUpperCorner().getX() - m_regSrc.getLowerCorner().getX(); float srcHeight = m_regSrc.getUpperCorner().getY() - m_regSrc.getLowerCorner().getY(); @@ -86,7 +87,7 @@ namespace PolyVox float fScaleY = srcHeight / dstHeight; float fScaleZ = srcDepth / dstDepth; - typename SrcVolumeType::Sampler sampler(m_pVolSrc); + typename SrcVolumeType::Sampler sampler(m_pVolSrc); for(int32_t dz = m_regDst.getLowerCorner().getZ(); dz <= m_regDst.getUpperCorner().getZ(); dz++) { @@ -103,23 +104,23 @@ namespace PolyVox sz += m_regSrc.getLowerCorner().getZ(); sampler.setPosition(sx,sy,sz); - VoxelType voxel000 = sampler.peekVoxel0px0py0pz(); - VoxelType voxel001 = sampler.peekVoxel0px0py1pz(); - VoxelType voxel010 = sampler.peekVoxel0px1py0pz(); - VoxelType voxel011 = sampler.peekVoxel0px1py1pz(); - VoxelType voxel100 = sampler.peekVoxel1px0py0pz(); - VoxelType voxel101 = sampler.peekVoxel1px0py1pz(); - VoxelType voxel110 = sampler.peekVoxel1px1py0pz(); - VoxelType voxel111 = sampler.peekVoxel1px1py1pz(); + SrcVolumeType::VoxelType voxel000 = sampler.peekVoxel0px0py0pz(); + SrcVolumeType::VoxelType voxel001 = sampler.peekVoxel0px0py1pz(); + SrcVolumeType::VoxelType voxel010 = sampler.peekVoxel0px1py0pz(); + SrcVolumeType::VoxelType voxel011 = sampler.peekVoxel0px1py1pz(); + SrcVolumeType::VoxelType voxel100 = sampler.peekVoxel1px0py0pz(); + SrcVolumeType::VoxelType voxel101 = sampler.peekVoxel1px0py1pz(); + SrcVolumeType::VoxelType voxel110 = sampler.peekVoxel1px1py0pz(); + SrcVolumeType::VoxelType voxel111 = sampler.peekVoxel1px1py1pz(); - typename VoxelTypeTraits::DensityType voxel000Den = convertToDensity(voxel000); - typename VoxelTypeTraits::DensityType voxel001Den = convertToDensity(voxel001); - typename VoxelTypeTraits::DensityType voxel010Den = convertToDensity(voxel010); - typename VoxelTypeTraits::DensityType voxel011Den = convertToDensity(voxel011); - typename VoxelTypeTraits::DensityType voxel100Den = convertToDensity(voxel100); - typename VoxelTypeTraits::DensityType voxel101Den = convertToDensity(voxel101); - typename VoxelTypeTraits::DensityType voxel110Den = convertToDensity(voxel110); - typename VoxelTypeTraits::DensityType voxel111Den = convertToDensity(voxel111); + typename VoxelTypeTraits::DensityType voxel000Den = convertToDensity(voxel000); + typename VoxelTypeTraits::DensityType voxel001Den = convertToDensity(voxel001); + typename VoxelTypeTraits::DensityType voxel010Den = convertToDensity(voxel010); + typename VoxelTypeTraits::DensityType voxel011Den = convertToDensity(voxel011); + typename VoxelTypeTraits::DensityType voxel100Den = convertToDensity(voxel100); + typename VoxelTypeTraits::DensityType voxel101Den = convertToDensity(voxel101); + typename VoxelTypeTraits::DensityType voxel110Den = convertToDensity(voxel110); + typename VoxelTypeTraits::DensityType voxel111Den = convertToDensity(voxel111); //FIXME - should accept all float parameters, but GCC complains? double dummy; @@ -127,9 +128,11 @@ namespace PolyVox sy = modf(sy, &dummy); sz = modf(sz, &dummy); - typename VoxelTypeTraits::DensityType uInterpolatedDensity = trilinearlyInterpolate(voxel000Den,voxel100Den,voxel010Den,voxel110Den,voxel001Den,voxel101Den,voxel011Den,voxel111Den,sx,sy,sz); + //Note: Consider what should happen if src and dest have different voxel types. + typename VoxelTypeTraits::DensityType uInterpolatedDensity = trilinearlyInterpolate(voxel000Den,voxel100Den,voxel010Den,voxel110Den,voxel001Den,voxel101Den,voxel011Den,voxel111Den,sx,sy,sz); - VoxelType result; + //Note: Consider what should happen if src and dest have different voxel types. + DestVolumeType::VoxelType result; //result.setDensity(uInterpolatedDensity); result = uInterpolatedDensity;