diff --git a/benchmarking/BenchmarkRayTracing.cxx b/benchmarking/BenchmarkRayTracing.cxx index e257b8528..d6708effb 100644 --- a/benchmarking/BenchmarkRayTracing.cxx +++ b/benchmarking/BenchmarkRayTracing.cxx @@ -50,21 +50,17 @@ namespace benchmarking template struct BenchRayTracing { + vtkm::rendering::raytracing::RayTracer Tracer; + vtkm::rendering::raytracing::Camera RayCamera; + vtkm::cont::ArrayHandle> Indices; + vtkm::rendering::raytracing::Ray Rays; + vtkm::cont::CoordinateSystem Coords; + vtkm::cont::DataSet Data; VTKM_CONT ~BenchRayTracing() {} - VTKM_CONT BenchRayTracing() {} - - VTKM_CONT - vtkm::Float64 operator()() + VTKM_CONT BenchRayTracing() { - vtkm::rendering::raytracing::RayTracer Tracer; - vtkm::rendering::raytracing::Camera RayCamera; - vtkm::cont::ArrayHandle> Indices; - vtkm::rendering::raytracing::Ray Rays; - vtkm::cont::CoordinateSystem Coords; - vtkm::cont::DataSet Data; - vtkm::Id3 dims(128, 128, 128); vtkm::cont::testing::MakeTestDataSet maker; Data = maker.Make3DUniformDataSet3(dims); @@ -79,8 +75,8 @@ struct BenchRayTracing vtkm::rendering::raytracing::TriangleExtractor triExtractor; triExtractor.ExtractCells(cellset); - vtkm::rendering::raytracing::TriangleIntersector* triIntersector = - new vtkm::rendering::raytracing::TriangleIntersector(); + auto triIntersector = std::make_shared( + vtkm::rendering::raytracing::TriangleIntersector()); triIntersector->SetData(Coords, triExtractor.GetTriangles()); Tracer.AddShapeIntersector(triIntersector); @@ -117,6 +113,12 @@ struct BenchRayTracing Tracer.SetColorMap(colors); Tracer.Render(Rays); + } + + VTKM_CONT + vtkm::Float64 operator()() + { + vtkm::cont::Timer timer; timer.Start(); @@ -125,7 +127,6 @@ struct BenchRayTracing try { Tracer.Render(Rays); - Tracer.Render(Rays); } catch (vtkm::cont::ErrorBadValue& e) { diff --git a/vtkm/rendering/MapperCylinder.cxx b/vtkm/rendering/MapperCylinder.cxx index 7488f59b8..9981fde62 100644 --- a/vtkm/rendering/MapperCylinder.cxx +++ b/vtkm/rendering/MapperCylinder.cxx @@ -184,7 +184,8 @@ void MapperCylinder::RenderCells(const vtkm::cont::DynamicCellSet& cellset, if (cylExtractor.GetNumberOfCylinders() > 0) { - raytracing::CylinderIntersector* cylIntersector = new raytracing::CylinderIntersector(); + auto cylIntersector = + std::make_shared(raytracing::CylinderIntersector()); cylIntersector->SetData(coords, cylExtractor.GetCylIds(), cylExtractor.GetRadii()); this->Internals->Tracer.AddShapeIntersector(cylIntersector); shapeBounds.Include(cylIntersector->GetShapeBounds()); diff --git a/vtkm/rendering/MapperPoint.cxx b/vtkm/rendering/MapperPoint.cxx index efe3142a0..e42f23d42 100644 --- a/vtkm/rendering/MapperPoint.cxx +++ b/vtkm/rendering/MapperPoint.cxx @@ -182,7 +182,8 @@ void MapperPoint::RenderCells(const vtkm::cont::DynamicCellSet& cellset, if (sphereExtractor.GetNumberOfSpheres() > 0) { - raytracing::SphereIntersector* sphereIntersector = new raytracing::SphereIntersector(); + auto sphereIntersector = + std::make_shared(raytracing::SphereIntersector()); sphereIntersector->SetData(coords, sphereExtractor.GetPointIds(), sphereExtractor.GetRadii()); this->Internals->Tracer.AddShapeIntersector(sphereIntersector); shapeBounds.Include(sphereIntersector->GetShapeBounds()); diff --git a/vtkm/rendering/MapperQuad.cxx b/vtkm/rendering/MapperQuad.cxx index e646bf9a4..661cdc4c5 100644 --- a/vtkm/rendering/MapperQuad.cxx +++ b/vtkm/rendering/MapperQuad.cxx @@ -104,7 +104,8 @@ void MapperQuad::RenderCells(const vtkm::cont::DynamicCellSet& cellset, quadExtractor.ExtractCells(cellset); if (quadExtractor.GetNumberOfQuads() > 0) { - raytracing::QuadIntersector* quadIntersector = new raytracing::QuadIntersector(); + auto quadIntersector = + std::make_shared(raytracing::QuadIntersector()); quadIntersector->SetData(coords, quadExtractor.GetQuadIds()); this->Internals->Tracer.AddShapeIntersector(quadIntersector); shapeBounds.Include(quadIntersector->GetShapeBounds()); diff --git a/vtkm/rendering/MapperRayTracer.cxx b/vtkm/rendering/MapperRayTracer.cxx index d93905ede..58f0d3bef 100644 --- a/vtkm/rendering/MapperRayTracer.cxx +++ b/vtkm/rendering/MapperRayTracer.cxx @@ -108,7 +108,8 @@ void MapperRayTracer::RenderCells(const vtkm::cont::DynamicCellSet& cellset, triExtractor.ExtractCells(cellset); if (triExtractor.GetNumberOfTriangles() > 0) { - raytracing::TriangleIntersector* triIntersector = new raytracing::TriangleIntersector(); + auto triIntersector = + std::make_shared(raytracing::TriangleIntersector()); triIntersector->SetData(coords, triExtractor.GetTriangles()); this->Internals->Tracer.AddShapeIntersector(triIntersector); shapeBounds.Include(triIntersector->GetShapeBounds()); diff --git a/vtkm/rendering/raytracing/RayTracer.cxx b/vtkm/rendering/raytracing/RayTracer.cxx index 431b18962..7bdcec9a9 100644 --- a/vtkm/rendering/raytracing/RayTracer.cxx +++ b/vtkm/rendering/raytracing/RayTracer.cxx @@ -230,7 +230,7 @@ Camera& RayTracer::GetCamera() } -void RayTracer::AddShapeIntersector(ShapeIntersector* intersector) +void RayTracer::AddShapeIntersector(std::shared_ptr intersector) { NumberOfShapes += intersector->GetNumberOfShapes(); Intersectors.push_back(intersector); @@ -269,12 +269,6 @@ vtkm::Id RayTracer::GetNumberOfShapes() const void RayTracer::Clear() { - size_t numShapes = Intersectors.size(); - for (size_t i = 0; i < numShapes; ++i) - { - delete Intersectors[i]; - } - Intersectors.clear(); } diff --git a/vtkm/rendering/raytracing/RayTracer.h b/vtkm/rendering/raytracing/RayTracer.h index 3947d126e..1be2acb8a 100644 --- a/vtkm/rendering/raytracing/RayTracer.h +++ b/vtkm/rendering/raytracing/RayTracer.h @@ -20,6 +20,7 @@ #ifndef vtk_m_rendering_raytracing_RayTracer_h #define vtk_m_rendering_raytracing_RayTracer_h +#include #include #include @@ -36,7 +37,7 @@ namespace raytracing class VTKM_RENDERING_EXPORT RayTracer { protected: - std::vector Intersectors; + std::vector> Intersectors; Camera camera; const vtkm::cont::Field* ScalarField; vtkm::cont::ArrayHandle Scalars; @@ -58,7 +59,7 @@ public: Camera& GetCamera(); VTKM_CONT - void AddShapeIntersector(ShapeIntersector* intersector); + void AddShapeIntersector(std::shared_ptr intersector); VTKM_CONT void SetField(const vtkm::cont::Field& scalarField, const vtkm::Range& scalarRange);