Merge topic 'rt_use_shared'

8a38717c3 have make_shared call default constructor
3fae21fa7 no pointers
4cd4637c1 ray tracing now using shared pointers for intersectors

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1556
This commit is contained in:
Matt Larsen 2019-02-23 15:39:34 +00:00 committed by Kitware Robot
commit 076a7311ca
16 changed files with 66 additions and 70 deletions

@ -50,21 +50,17 @@ namespace benchmarking
template <typename Precision> template <typename Precision>
struct BenchRayTracing struct BenchRayTracing
{ {
vtkm::rendering::raytracing::RayTracer Tracer;
vtkm::rendering::raytracing::Camera RayCamera;
vtkm::cont::ArrayHandle<vtkm::Vec<vtkm::Id, 4>> Indices;
vtkm::rendering::raytracing::Ray<Precision> Rays;
vtkm::cont::CoordinateSystem Coords;
vtkm::cont::DataSet Data;
VTKM_CONT ~BenchRayTracing() {} VTKM_CONT ~BenchRayTracing() {}
VTKM_CONT BenchRayTracing() {} VTKM_CONT BenchRayTracing()
VTKM_CONT
vtkm::Float64 operator()()
{ {
vtkm::rendering::raytracing::RayTracer Tracer;
vtkm::rendering::raytracing::Camera RayCamera;
vtkm::cont::ArrayHandle<vtkm::Vec<vtkm::Id, 4>> Indices;
vtkm::rendering::raytracing::Ray<Precision> Rays;
vtkm::cont::CoordinateSystem Coords;
vtkm::cont::DataSet Data;
vtkm::Id3 dims(128, 128, 128); vtkm::Id3 dims(128, 128, 128);
vtkm::cont::testing::MakeTestDataSet maker; vtkm::cont::testing::MakeTestDataSet maker;
Data = maker.Make3DUniformDataSet3(dims); Data = maker.Make3DUniformDataSet3(dims);
@ -79,8 +75,8 @@ struct BenchRayTracing
vtkm::rendering::raytracing::TriangleExtractor triExtractor; vtkm::rendering::raytracing::TriangleExtractor triExtractor;
triExtractor.ExtractCells(cellset); triExtractor.ExtractCells(cellset);
vtkm::rendering::raytracing::TriangleIntersector* triIntersector = auto triIntersector = std::make_shared<vtkm::rendering::raytracing::TriangleIntersector>(
new vtkm::rendering::raytracing::TriangleIntersector(); vtkm::rendering::raytracing::TriangleIntersector());
triIntersector->SetData(Coords, triExtractor.GetTriangles()); triIntersector->SetData(Coords, triExtractor.GetTriangles());
Tracer.AddShapeIntersector(triIntersector); Tracer.AddShapeIntersector(triIntersector);
@ -117,6 +113,12 @@ struct BenchRayTracing
Tracer.SetColorMap(colors); Tracer.SetColorMap(colors);
Tracer.Render(Rays); Tracer.Render(Rays);
}
VTKM_CONT
vtkm::Float64 operator()()
{
vtkm::cont::Timer timer; vtkm::cont::Timer timer;
timer.Start(); timer.Start();
@ -125,7 +127,6 @@ struct BenchRayTracing
try try
{ {
Tracer.Render(Rays); Tracer.Render(Rays);
Tracer.Render(Rays);
} }
catch (vtkm::cont::ErrorBadValue& e) catch (vtkm::cont::ErrorBadValue& e)
{ {

@ -184,7 +184,7 @@ void MapperCylinder::RenderCells(const vtkm::cont::DynamicCellSet& cellset,
if (cylExtractor.GetNumberOfCylinders() > 0) if (cylExtractor.GetNumberOfCylinders() > 0)
{ {
raytracing::CylinderIntersector* cylIntersector = new raytracing::CylinderIntersector(); auto cylIntersector = std::make_shared<raytracing::CylinderIntersector>();
cylIntersector->SetData(coords, cylExtractor.GetCylIds(), cylExtractor.GetRadii()); cylIntersector->SetData(coords, cylExtractor.GetCylIds(), cylExtractor.GetRadii());
this->Internals->Tracer.AddShapeIntersector(cylIntersector); this->Internals->Tracer.AddShapeIntersector(cylIntersector);
shapeBounds.Include(cylIntersector->GetShapeBounds()); shapeBounds.Include(cylIntersector->GetShapeBounds());

@ -182,7 +182,7 @@ void MapperPoint::RenderCells(const vtkm::cont::DynamicCellSet& cellset,
if (sphereExtractor.GetNumberOfSpheres() > 0) if (sphereExtractor.GetNumberOfSpheres() > 0)
{ {
raytracing::SphereIntersector* sphereIntersector = new raytracing::SphereIntersector(); auto sphereIntersector = std::make_shared<raytracing::SphereIntersector>();
sphereIntersector->SetData(coords, sphereExtractor.GetPointIds(), sphereExtractor.GetRadii()); sphereIntersector->SetData(coords, sphereExtractor.GetPointIds(), sphereExtractor.GetRadii());
this->Internals->Tracer.AddShapeIntersector(sphereIntersector); this->Internals->Tracer.AddShapeIntersector(sphereIntersector);
shapeBounds.Include(sphereIntersector->GetShapeBounds()); shapeBounds.Include(sphereIntersector->GetShapeBounds());

@ -104,7 +104,7 @@ void MapperQuad::RenderCells(const vtkm::cont::DynamicCellSet& cellset,
quadExtractor.ExtractCells(cellset); quadExtractor.ExtractCells(cellset);
if (quadExtractor.GetNumberOfQuads() > 0) if (quadExtractor.GetNumberOfQuads() > 0)
{ {
raytracing::QuadIntersector* quadIntersector = new raytracing::QuadIntersector(); auto quadIntersector = std::make_shared<raytracing::QuadIntersector>();
quadIntersector->SetData(coords, quadExtractor.GetQuadIds()); quadIntersector->SetData(coords, quadExtractor.GetQuadIds());
this->Internals->Tracer.AddShapeIntersector(quadIntersector); this->Internals->Tracer.AddShapeIntersector(quadIntersector);
shapeBounds.Include(quadIntersector->GetShapeBounds()); shapeBounds.Include(quadIntersector->GetShapeBounds());

@ -108,7 +108,7 @@ void MapperRayTracer::RenderCells(const vtkm::cont::DynamicCellSet& cellset,
triExtractor.ExtractCells(cellset); triExtractor.ExtractCells(cellset);
if (triExtractor.GetNumberOfTriangles() > 0) if (triExtractor.GetNumberOfTriangles() > 0)
{ {
raytracing::TriangleIntersector* triIntersector = new raytracing::TriangleIntersector(); auto triIntersector = std::make_shared<raytracing::TriangleIntersector>();
triIntersector->SetData(coords, triExtractor.GetTriangles()); triIntersector->SetData(coords, triExtractor.GetTriangles());
this->Internals->Tracer.AddShapeIntersector(triIntersector); this->Internals->Tracer.AddShapeIntersector(triIntersector);
shapeBounds.Include(triIntersector->GetShapeBounds()); shapeBounds.Include(triIntersector->GetShapeBounds());

@ -469,15 +469,15 @@ void CylinderIntersector::IntersectRaysImp(Ray<Precision>& rays, bool vtkmNotUse
template <typename Precision> template <typename Precision>
void CylinderIntersector::IntersectionDataImp(Ray<Precision>& rays, void CylinderIntersector::IntersectionDataImp(Ray<Precision>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) const vtkm::Range& scalarRange)
{ {
ShapeIntersector::IntersectionPoint(rays); ShapeIntersector::IntersectionPoint(rays);
// TODO: if this is nodes of a mesh, support points // TODO: if this is nodes of a mesh, support points
bool isSupportedField = bool isSupportedField =
(scalarField->GetAssociation() == vtkm::cont::Field::Association::POINTS || (scalarField.GetAssociation() == vtkm::cont::Field::Association::POINTS ||
scalarField->GetAssociation() == vtkm::cont::Field::Association::CELL_SET); scalarField.GetAssociation() == vtkm::cont::Field::Association::CELL_SET);
if (!isSupportedField) if (!isSupportedField)
throw vtkm::cont::ErrorBadValue("Field not accociated with a cell set"); throw vtkm::cont::ErrorBadValue("Field not accociated with a cell set");
@ -493,18 +493,18 @@ void CylinderIntersector::IntersectionDataImp(Ray<Precision>& rays,
vtkm::worklet::DispatcherMapField<detail::GetScalar<Precision>>( vtkm::worklet::DispatcherMapField<detail::GetScalar<Precision>>(
detail::GetScalar<Precision>(vtkm::Float32(scalarRange.Min), vtkm::Float32(scalarRange.Max))) detail::GetScalar<Precision>(vtkm::Float32(scalarRange.Min), vtkm::Float32(scalarRange.Max)))
.Invoke( .Invoke(
rays.HitIdx, rays.Scalar, scalarField->GetData().ResetTypes(ScalarRenderingTypes()), CylIds); rays.HitIdx, rays.Scalar, scalarField.GetData().ResetTypes(ScalarRenderingTypes()), CylIds);
} }
void CylinderIntersector::IntersectionData(Ray<vtkm::Float32>& rays, void CylinderIntersector::IntersectionData(Ray<vtkm::Float32>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) const vtkm::Range& scalarRange)
{ {
IntersectionDataImp(rays, scalarField, scalarRange); IntersectionDataImp(rays, scalarField, scalarRange);
} }
void CylinderIntersector::IntersectionData(Ray<vtkm::Float64>& rays, void CylinderIntersector::IntersectionData(Ray<vtkm::Float64>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) const vtkm::Range& scalarRange)
{ {
IntersectionDataImp(rays, scalarField, scalarRange); IntersectionDataImp(rays, scalarField, scalarRange);

@ -58,15 +58,15 @@ public:
template <typename Precision> template <typename Precision>
void IntersectionDataImp(Ray<Precision>& rays, void IntersectionDataImp(Ray<Precision>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange); const vtkm::Range& scalarRange);
void IntersectionData(Ray<vtkm::Float32>& rays, void IntersectionData(Ray<vtkm::Float32>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) override; const vtkm::Range& scalarRange) override;
void IntersectionData(Ray<vtkm::Float64>& rays, void IntersectionData(Ray<vtkm::Float64>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) override; const vtkm::Range& scalarRange) override;
vtkm::Id GetNumberOfShapes() const override; vtkm::Id GetNumberOfShapes() const override;

@ -437,15 +437,15 @@ void QuadIntersector::IntersectRaysImp(Ray<Precision>& rays, bool vtkmNotUsed(re
template <typename Precision> template <typename Precision>
void QuadIntersector::IntersectionDataImp(Ray<Precision>& rays, void QuadIntersector::IntersectionDataImp(Ray<Precision>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) const vtkm::Range& scalarRange)
{ {
ShapeIntersector::IntersectionPoint(rays); ShapeIntersector::IntersectionPoint(rays);
// TODO: if this is nodes of a mesh, support points // TODO: if this is nodes of a mesh, support points
bool isSupportedField = bool isSupportedField =
(scalarField->GetAssociation() == vtkm::cont::Field::Association::POINTS || (scalarField.GetAssociation() == vtkm::cont::Field::Association::POINTS ||
scalarField->GetAssociation() == vtkm::cont::Field::Association::CELL_SET); scalarField.GetAssociation() == vtkm::cont::Field::Association::CELL_SET);
if (!isSupportedField) if (!isSupportedField)
throw vtkm::cont::ErrorBadValue("Field not accociated with a cell set"); throw vtkm::cont::ErrorBadValue("Field not accociated with a cell set");
@ -456,19 +456,19 @@ void QuadIntersector::IntersectionDataImp(Ray<Precision>& rays,
detail::GetScalar<Precision>(vtkm::Float32(scalarRange.Min), vtkm::Float32(scalarRange.Max))) detail::GetScalar<Precision>(vtkm::Float32(scalarRange.Min), vtkm::Float32(scalarRange.Max)))
.Invoke(rays.HitIdx, .Invoke(rays.HitIdx,
rays.Scalar, rays.Scalar,
scalarField->GetData().ResetTypes(vtkm::TypeListTagFieldScalar()), scalarField.GetData().ResetTypes(vtkm::TypeListTagFieldScalar()),
QuadIds); QuadIds);
} }
void QuadIntersector::IntersectionData(Ray<vtkm::Float32>& rays, void QuadIntersector::IntersectionData(Ray<vtkm::Float32>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) const vtkm::Range& scalarRange)
{ {
IntersectionDataImp(rays, scalarField, scalarRange); IntersectionDataImp(rays, scalarField, scalarRange);
} }
void QuadIntersector::IntersectionData(Ray<vtkm::Float64>& rays, void QuadIntersector::IntersectionData(Ray<vtkm::Float64>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) const vtkm::Range& scalarRange)
{ {
IntersectionDataImp(rays, scalarField, scalarRange); IntersectionDataImp(rays, scalarField, scalarRange);

@ -56,15 +56,15 @@ public:
template <typename Precision> template <typename Precision>
void IntersectionDataImp(Ray<Precision>& rays, void IntersectionDataImp(Ray<Precision>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange); const vtkm::Range& scalarRange);
void IntersectionData(Ray<vtkm::Float32>& rays, void IntersectionData(Ray<vtkm::Float32>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) override; const vtkm::Range& scalarRange) override;
void IntersectionData(Ray<vtkm::Float64>& rays, void IntersectionData(Ray<vtkm::Float64>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) override; const vtkm::Range& scalarRange) override;
vtkm::Id GetNumberOfShapes() const override; vtkm::Id GetNumberOfShapes() const override;

@ -230,7 +230,7 @@ Camera& RayTracer::GetCamera()
} }
void RayTracer::AddShapeIntersector(ShapeIntersector* intersector) void RayTracer::AddShapeIntersector(std::shared_ptr<ShapeIntersector> intersector)
{ {
NumberOfShapes += intersector->GetNumberOfShapes(); NumberOfShapes += intersector->GetNumberOfShapes();
Intersectors.push_back(intersector); Intersectors.push_back(intersector);
@ -238,7 +238,7 @@ void RayTracer::AddShapeIntersector(ShapeIntersector* intersector)
void RayTracer::SetField(const vtkm::cont::Field& scalarField, const vtkm::Range& scalarRange) void RayTracer::SetField(const vtkm::cont::Field& scalarField, const vtkm::Range& scalarRange)
{ {
ScalarField = &scalarField; ScalarField = scalarField;
ScalarRange = scalarRange; ScalarRange = scalarRange;
} }
@ -269,12 +269,6 @@ vtkm::Id RayTracer::GetNumberOfShapes() const
void RayTracer::Clear() void RayTracer::Clear()
{ {
size_t numShapes = Intersectors.size();
for (size_t i = 0; i < numShapes; ++i)
{
delete Intersectors[i];
}
Intersectors.clear(); Intersectors.clear();
} }

@ -20,6 +20,7 @@
#ifndef vtk_m_rendering_raytracing_RayTracer_h #ifndef vtk_m_rendering_raytracing_RayTracer_h
#define vtk_m_rendering_raytracing_RayTracer_h #define vtk_m_rendering_raytracing_RayTracer_h
#include <memory>
#include <vector> #include <vector>
#include <vtkm/cont/DataSet.h> #include <vtkm/cont/DataSet.h>
@ -36,9 +37,9 @@ namespace raytracing
class VTKM_RENDERING_EXPORT RayTracer class VTKM_RENDERING_EXPORT RayTracer
{ {
protected: protected:
std::vector<ShapeIntersector*> Intersectors; std::vector<std::shared_ptr<ShapeIntersector>> Intersectors;
Camera camera; Camera camera;
const vtkm::cont::Field* ScalarField; vtkm::cont::Field ScalarField;
vtkm::cont::ArrayHandle<vtkm::Float32> Scalars; vtkm::cont::ArrayHandle<vtkm::Float32> Scalars;
vtkm::Id NumberOfShapes; vtkm::Id NumberOfShapes;
vtkm::cont::ArrayHandle<vtkm::Vec<vtkm::Float32, 4>> ColorMap; vtkm::cont::ArrayHandle<vtkm::Vec<vtkm::Float32, 4>> ColorMap;
@ -58,7 +59,7 @@ public:
Camera& GetCamera(); Camera& GetCamera();
VTKM_CONT VTKM_CONT
void AddShapeIntersector(ShapeIntersector* intersector); void AddShapeIntersector(std::shared_ptr<ShapeIntersector> intersector);
VTKM_CONT VTKM_CONT
void SetField(const vtkm::cont::Field& scalarField, const vtkm::Range& scalarRange); void SetField(const vtkm::cont::Field& scalarField, const vtkm::Range& scalarRange);

@ -63,11 +63,11 @@ public:
// becomes the new max distance. // becomes the new max distance.
// //
virtual void IntersectionData(Ray<vtkm::Float32>& rays, virtual void IntersectionData(Ray<vtkm::Float32>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) = 0; const vtkm::Range& scalarRange) = 0;
virtual void IntersectionData(Ray<vtkm::Float64>& rays, virtual void IntersectionData(Ray<vtkm::Float64>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) = 0; const vtkm::Range& scalarRange) = 0;

@ -345,14 +345,14 @@ void SphereIntersector::IntersectRaysImp(Ray<Precision>& rays, bool vtkmNotUsed(
template <typename Precision> template <typename Precision>
void SphereIntersector::IntersectionDataImp(Ray<Precision>& rays, void SphereIntersector::IntersectionDataImp(Ray<Precision>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) const vtkm::Range& scalarRange)
{ {
ShapeIntersector::IntersectionPoint(rays); ShapeIntersector::IntersectionPoint(rays);
bool isSupportedField = bool isSupportedField =
(scalarField->GetAssociation() == vtkm::cont::Field::Association::POINTS || (scalarField.GetAssociation() == vtkm::cont::Field::Association::POINTS ||
scalarField->GetAssociation() == vtkm::cont::Field::Association::CELL_SET); scalarField.GetAssociation() == vtkm::cont::Field::Association::CELL_SET);
if (!isSupportedField) if (!isSupportedField)
throw vtkm::cont::ErrorBadValue( throw vtkm::cont::ErrorBadValue(
"SphereIntersector: Field not accociated with a cell set or field"); "SphereIntersector: Field not accociated with a cell set or field");
@ -370,19 +370,19 @@ void SphereIntersector::IntersectionDataImp(Ray<Precision>& rays,
detail::GetScalar<Precision>(vtkm::Float32(scalarRange.Min), vtkm::Float32(scalarRange.Max))) detail::GetScalar<Precision>(vtkm::Float32(scalarRange.Min), vtkm::Float32(scalarRange.Max)))
.Invoke(rays.HitIdx, .Invoke(rays.HitIdx,
rays.Scalar, rays.Scalar,
scalarField->GetData().ResetTypes(vtkm::TypeListTagFieldScalar()), scalarField.GetData().ResetTypes(vtkm::TypeListTagFieldScalar()),
PointIds); PointIds);
} }
void SphereIntersector::IntersectionData(Ray<vtkm::Float32>& rays, void SphereIntersector::IntersectionData(Ray<vtkm::Float32>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) const vtkm::Range& scalarRange)
{ {
IntersectionDataImp(rays, scalarField, scalarRange); IntersectionDataImp(rays, scalarField, scalarRange);
} }
void SphereIntersector::IntersectionData(Ray<vtkm::Float64>& rays, void SphereIntersector::IntersectionData(Ray<vtkm::Float64>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) const vtkm::Range& scalarRange)
{ {
IntersectionDataImp(rays, scalarField, scalarRange); IntersectionDataImp(rays, scalarField, scalarRange);

@ -54,15 +54,15 @@ public:
template <typename Precision> template <typename Precision>
void IntersectionDataImp(Ray<Precision>& rays, void IntersectionDataImp(Ray<Precision>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange); const vtkm::Range& scalarRange);
void IntersectionData(Ray<vtkm::Float32>& rays, void IntersectionData(Ray<vtkm::Float32>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) override; const vtkm::Range& scalarRange) override;
void IntersectionData(Ray<vtkm::Float64>& rays, void IntersectionData(Ray<vtkm::Float64>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) override; const vtkm::Range& scalarRange) override;
vtkm::Id GetNumberOfShapes() const override; vtkm::Id GetNumberOfShapes() const override;

@ -340,15 +340,15 @@ public:
VTKM_CONT void Run(Ray<Precision>& rays, VTKM_CONT void Run(Ray<Precision>& rays,
vtkm::cont::ArrayHandle<vtkm::Vec<vtkm::Id, 4>> triangles, vtkm::cont::ArrayHandle<vtkm::Vec<vtkm::Id, 4>> triangles,
vtkm::cont::CoordinateSystem coordsHandle, vtkm::cont::CoordinateSystem coordsHandle,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) const vtkm::Range& scalarRange)
{ {
bool isSupportedField = bool isSupportedField =
(scalarField->GetAssociation() == vtkm::cont::Field::Association::POINTS || (scalarField.GetAssociation() == vtkm::cont::Field::Association::POINTS ||
scalarField->GetAssociation() == vtkm::cont::Field::Association::CELL_SET); scalarField.GetAssociation() == vtkm::cont::Field::Association::CELL_SET);
if (!isSupportedField) if (!isSupportedField)
throw vtkm::cont::ErrorBadValue("Field not accociated with cell set or points"); throw vtkm::cont::ErrorBadValue("Field not accociated with cell set or points");
bool isAssocPoints = scalarField->GetAssociation() == vtkm::cont::Field::Association::POINTS; bool isAssocPoints = scalarField.GetAssociation() == vtkm::cont::Field::Association::POINTS;
// Find the triangle normal // Find the triangle normal
vtkm::worklet::DispatcherMapField<CalculateNormals>(CalculateNormals()) vtkm::worklet::DispatcherMapField<CalculateNormals>(CalculateNormals())
@ -364,7 +364,7 @@ public:
rays.U, rays.U,
rays.V, rays.V,
rays.Scalar, rays.Scalar,
scalarField->GetData().ResetTypes(ScalarRenderingTypes()), scalarField.GetData().ResetTypes(ScalarRenderingTypes()),
triangles); triangles);
} }
else else
@ -373,7 +373,7 @@ public:
NodalScalar<Precision>(vtkm::Float32(scalarRange.Min), vtkm::Float32(scalarRange.Max))) NodalScalar<Precision>(vtkm::Float32(scalarRange.Min), vtkm::Float32(scalarRange.Max)))
.Invoke(rays.HitIdx, .Invoke(rays.HitIdx,
rays.Scalar, rays.Scalar,
scalarField->GetData().ResetTypes(ScalarRenderingTypes()), scalarField.GetData().ResetTypes(ScalarRenderingTypes()),
triangles); triangles);
} }
} // Run } // Run
@ -525,14 +525,14 @@ VTKM_CONT void TriangleIntersector::IntersectRaysImp(Ray<Precision>& rays, bool
} }
VTKM_CONT void TriangleIntersector::IntersectionData(Ray<vtkm::Float32>& rays, VTKM_CONT void TriangleIntersector::IntersectionData(Ray<vtkm::Float32>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) const vtkm::Range& scalarRange)
{ {
IntersectionDataImp(rays, scalarField, scalarRange); IntersectionDataImp(rays, scalarField, scalarRange);
} }
VTKM_CONT void TriangleIntersector::IntersectionData(Ray<vtkm::Float64>& rays, VTKM_CONT void TriangleIntersector::IntersectionData(Ray<vtkm::Float64>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) const vtkm::Range& scalarRange)
{ {
IntersectionDataImp(rays, scalarField, scalarRange); IntersectionDataImp(rays, scalarField, scalarRange);
@ -540,7 +540,7 @@ VTKM_CONT void TriangleIntersector::IntersectionData(Ray<vtkm::Float64>& rays,
template <typename Precision> template <typename Precision>
VTKM_CONT void TriangleIntersector::IntersectionDataImp(Ray<Precision>& rays, VTKM_CONT void TriangleIntersector::IntersectionDataImp(Ray<Precision>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) const vtkm::Range& scalarRange)
{ {
ShapeIntersector::IntersectionPoint(rays); ShapeIntersector::IntersectionPoint(rays);

@ -55,11 +55,11 @@ public:
VTKM_CONT void IntersectionData(Ray<vtkm::Float32>& rays, VTKM_CONT void IntersectionData(Ray<vtkm::Float32>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) override; const vtkm::Range& scalarRange) override;
VTKM_CONT void IntersectionData(Ray<vtkm::Float64>& rays, VTKM_CONT void IntersectionData(Ray<vtkm::Float64>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange) override; const vtkm::Range& scalarRange) override;
template <typename Precision> template <typename Precision>
@ -67,7 +67,7 @@ public:
template <typename Precision> template <typename Precision>
VTKM_CONT void IntersectionDataImp(Ray<Precision>& rays, VTKM_CONT void IntersectionDataImp(Ray<Precision>& rays,
const vtkm::cont::Field* scalarField, const vtkm::cont::Field scalarField,
const vtkm::Range& scalarRange); const vtkm::Range& scalarRange);
}; // class intersector }; // class intersector