Consolidate getting a scalar field array

There are several places in the ray casting library that require
operating on a field that we know is a scalar field. Previously, these
were all independently cast to an uncertain array of the limited types.
Rather than have independent calls everywere, make a consolidated
function that does the same operation for everyone.

This fixes an issue with using a deprecated version of a method. It also
makes it possible to quickly change types in the future.
This commit is contained in:
Kenneth Moreland 2021-01-21 17:57:33 -07:00
parent 49ad0152d7
commit 3f5193d231
11 changed files with 46 additions and 32 deletions

@ -261,7 +261,7 @@ void MapperWireframer::RenderCells(const vtkm::cont::DynamicCellSet& inCellSet,
vtkm::worklet::DispatcherMapField<Convert1DCoordinates>(
Convert1DCoordinates(this->LogarithmY, this->LogarithmX))
.Invoke(coords.GetData(),
inScalarField.GetData().ResetTypes(vtkm::TypeListFieldScalar()),
vtkm::rendering::raytracing::GetScalarFieldArray(inScalarField),
newCoords,
newScalars);

@ -545,7 +545,7 @@ private:
vtkm::worklet::DispatcherMapField<EdgePlotter<DeviceTag>> plotterDispatcher(plotter);
plotterDispatcher.SetDevice(DeviceTag());
plotterDispatcher.Invoke(
PointIndices, Coordinates, ScalarField.GetData().ResetTypes(vtkm::TypeListFieldScalar()));
PointIndices, Coordinates, vtkm::rendering::raytracing::GetScalarFieldArray(ScalarField));
}
BufferConverter converter;

@ -1212,7 +1212,7 @@ void ConnectivityTracer::SampleCells(Ray<FloatType>& rays, detail::RayTracking<F
vtkm::Float32(this->ScalarBounds.Max)));
dispatcher.Invoke(rays.HitIdx,
this->Coords,
this->ScalarField.GetData().ResetTypes(ScalarRenderingTypes()),
vtkm::rendering::raytracing::GetScalarFieldArray(this->ScalarField),
*(tracker.EnterDist),
*(tracker.ExitDist),
tracker.CurrentDistance,
@ -1232,7 +1232,7 @@ void ConnectivityTracer::SampleCells(Ray<FloatType>& rays, detail::RayTracking<F
vtkm::Float32(this->ScalarBounds.Max)));
dispatcher.Invoke(rays.HitIdx,
this->ScalarField.GetData().ResetTypes(ScalarRenderingTypes()),
vtkm::rendering::raytracing::GetScalarFieldArray(this->ScalarField),
*(tracker.EnterDist),
*(tracker.ExitDist),
tracker.CurrentDistance,
@ -1262,8 +1262,8 @@ void ConnectivityTracer::IntegrateCells(Ray<FloatType>& rays,
*(tracker.EnterDist),
*(tracker.ExitDist),
rays.Distance,
this->ScalarField.GetData().ResetTypes(ScalarRenderingTypes()),
this->EmissionField.GetData().ResetTypes(ScalarRenderingTypes()),
vtkm::rendering::raytracing::GetScalarFieldArray(this->ScalarField),
vtkm::rendering::raytracing::GetScalarFieldArray(this->EmissionField),
absorp,
emission,
rays.HitIdx);
@ -1276,7 +1276,7 @@ void ConnectivityTracer::IntegrateCells(Ray<FloatType>& rays,
*(tracker.EnterDist),
*(tracker.ExitDist),
rays.Distance,
this->ScalarField.GetData().ResetTypes(ScalarRenderingTypes()),
vtkm::rendering::raytracing::GetScalarFieldArray(this->ScalarField),
rays.Buffers.at(0).Buffer,
rays.HitIdx);
}

@ -288,7 +288,7 @@ void CylinderExtractor::SetVaryingRadius(const vtkm::Float32 minRadius,
Radii.Allocate(this->CylIds.GetNumberOfValues());
vtkm::worklet::DispatcherMapField<detail::FieldRadius>(
detail::FieldRadius(minRadius, maxRadius, range))
.Invoke(this->CylIds, this->Radii, field.GetData().ResetTypes(vtkm::TypeListFieldScalar()));
.Invoke(this->CylIds, this->Radii, vtkm::rendering::raytracing::GetScalarFieldArray(field));
}

@ -497,8 +497,10 @@ void CylinderIntersector::IntersectionDataImp(Ray<Precision>& rays,
vtkm::worklet::DispatcherMapField<detail::GetScalar<Precision>>(
detail::GetScalar<Precision>(vtkm::Float32(scalarRange.Min), vtkm::Float32(scalarRange.Max)))
.Invoke(
rays.HitIdx, rays.Scalar, scalarField.GetData().ResetTypes(ScalarRenderingTypes()), CylIds);
.Invoke(rays.HitIdx,
rays.Scalar,
vtkm::rendering::raytracing::GetScalarFieldArray(scalarField),
CylIds);
}
void CylinderIntersector::IntersectionData(Ray<vtkm::Float32>& rays,

@ -458,7 +458,7 @@ void QuadIntersector::IntersectionDataImp(Ray<Precision>& rays,
detail::GetScalar<Precision>(vtkm::Float32(scalarRange.Min), vtkm::Float32(scalarRange.Max)))
.Invoke(rays.HitIdx,
rays.Scalar,
scalarField.GetData().ResetTypes(vtkm::TypeListFieldScalar()),
vtkm::rendering::raytracing::GetScalarFieldArray(scalarField),
QuadIds);
}

@ -18,8 +18,9 @@
#include <vtkm/cont/ArrayHandleCompositeVector.h>
#include <vtkm/cont/ArrayHandleUniformPointCoordinates.h>
#include <vtkm/cont/DeviceAdapterList.h>
#include <vtkm/cont/Field.h>
#include <vtkm/cont/TryExecute.h>
#include <vtkm/cont/VariantArrayHandle.h>
#include <vtkm/cont/UncertainArrayHandle.h>
namespace vtkm
{
@ -137,6 +138,12 @@ using ScalarD = vtkm::Float64;
using RayStatusType = vtkm::List<vtkm::UInt8>;
using ScalarRenderingTypes = vtkm::List<ScalarF, ScalarD>;
VTKM_CONT inline vtkm::cont::UncertainArrayHandle<ScalarRenderingTypes, VTKM_DEFAULT_STORAGE_LIST>
GetScalarFieldArray(const vtkm::cont::Field& field)
{
return field.GetData().ResetTypes(ScalarRenderingTypes{}, VTKM_DEFAULT_STORAGE_LIST{});
}
}
}
} //namespace vtkm::rendering::raytracing

@ -10,6 +10,8 @@
#include <vtkm/rendering/raytracing/SphereExtractor.h>
#include <vtkm/rendering/raytracing/RayTracingTypeDefs.h>
#include <vtkm/cont/Algorithm.h>
#include <vtkm/worklet/WorkletMapField.h>
#include <vtkm/worklet/WorkletMapTopology.h>
@ -267,7 +269,7 @@ void SphereExtractor::SetVaryingRadius(const vtkm::Float32 minRadius,
Radii.Allocate(this->PointIds.GetNumberOfValues());
vtkm::worklet::DispatcherMapField<detail::FieldRadius>(
detail::FieldRadius(minRadius, maxRadius, range))
.Invoke(this->PointIds, this->Radii, field.GetData().ResetTypes(vtkm::TypeListFieldScalar()));
.Invoke(this->PointIds, this->Radii, vtkm::rendering::raytracing::GetScalarFieldArray(field));
}
vtkm::cont::ArrayHandle<vtkm::Id> SphereExtractor::GetPointIds()

@ -375,7 +375,7 @@ void SphereIntersector::IntersectionDataImp(Ray<Precision>& rays,
detail::GetScalar<Precision>(vtkm::Float32(scalarRange.Min), vtkm::Float32(scalarRange.Max)))
.Invoke(rays.HitIdx,
rays.Scalar,
scalarField.GetData().ResetTypes(vtkm::TypeListFieldScalar()),
vtkm::rendering::raytracing::GetScalarFieldArray(scalarField),
PointIds);
}

@ -385,7 +385,7 @@ public:
rays.U,
rays.V,
rays.Scalar,
scalarField.GetData().ResetTypes(ScalarRenderingTypes()),
vtkm::rendering::raytracing::GetScalarFieldArray(scalarField),
triangles);
}
else
@ -394,7 +394,7 @@ public:
NodalScalar<Precision>(vtkm::Float32(scalarRange.Min), vtkm::Float32(scalarRange.Max)))
.Invoke(rays.HitIdx,
rays.Scalar,
scalarField.GetData().ResetTypes(ScalarRenderingTypes()),
vtkm::rendering::raytracing::GetScalarFieldArray(scalarField),
triangles);
}
} // Run

@ -829,7 +829,8 @@ void VolumeRendererStructured::RenderOnDevice(vtkm::rendering::raytracing::Ray<P
{
vtkm::cont::Token token;
vtkm::cont::ArrayHandleUniformPointCoordinates vertices;
vertices = Coordinates.GetData().Cast<vtkm::cont::ArrayHandleUniformPointCoordinates>();
vertices =
Coordinates.GetData().AsArrayHandle<vtkm::cont::ArrayHandleUniformPointCoordinates>();
UniformLocator<Device> locator(vertices, Cellset, token);
if (isAssocPoints)
@ -843,12 +844,13 @@ void VolumeRendererStructured::RenderOnDevice(vtkm::rendering::raytracing::Ray<P
meshEpsilon,
token));
samplerDispatcher.SetDevice(Device());
samplerDispatcher.Invoke(rays.Dir,
rays.Origin,
rays.MinDistance,
rays.MaxDistance,
rays.Buffers.at(0).Buffer,
ScalarField->GetData().ResetTypes(vtkm::TypeListFieldScalar()));
samplerDispatcher.Invoke(
rays.Dir,
rays.Origin,
rays.MinDistance,
rays.MaxDistance,
rays.Buffers.at(0).Buffer,
vtkm::rendering::raytracing::GetScalarFieldArray(*this->ScalarField));
}
else
{
@ -865,14 +867,14 @@ void VolumeRendererStructured::RenderOnDevice(vtkm::rendering::raytracing::Ray<P
rays.MinDistance,
rays.MaxDistance,
rays.Buffers.at(0).Buffer,
ScalarField->GetData().ResetTypes(vtkm::TypeListFieldScalar()));
vtkm::rendering::raytracing::GetScalarFieldArray(*this->ScalarField));
}
}
else
{
vtkm::cont::Token token;
CartesianArrayHandle vertices;
vertices = Coordinates.GetData().Cast<CartesianArrayHandle>();
vertices = Coordinates.GetData().AsArrayHandle<CartesianArrayHandle>();
RectilinearLocator<Device> locator(vertices, Cellset, token);
if (isAssocPoints)
{
@ -886,12 +888,13 @@ void VolumeRendererStructured::RenderOnDevice(vtkm::rendering::raytracing::Ray<P
meshEpsilon,
token));
samplerDispatcher.SetDevice(Device());
samplerDispatcher.Invoke(rays.Dir,
rays.Origin,
rays.MinDistance,
rays.MaxDistance,
rays.Buffers.at(0).Buffer,
ScalarField->GetData().ResetTypes(vtkm::TypeListFieldScalar()));
samplerDispatcher.Invoke(
rays.Dir,
rays.Origin,
rays.MinDistance,
rays.MaxDistance,
rays.Buffers.at(0).Buffer,
vtkm::rendering::raytracing::GetScalarFieldArray(*this->ScalarField));
}
else
{
@ -911,7 +914,7 @@ void VolumeRendererStructured::RenderOnDevice(vtkm::rendering::raytracing::Ray<P
rays.MinDistance,
rays.MaxDistance,
rays.Buffers.at(0).Buffer,
ScalarField->GetData().ResetTypes(vtkm::TypeListFieldScalar()));
vtkm::rendering::raytracing::GetScalarFieldArray(*this->ScalarField));
}
}