mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-08 21:33:55 +00:00
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:
parent
49ad0152d7
commit
3f5193d231
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user