diff --git a/vtkm/rendering/CMakeLists.txt b/vtkm/rendering/CMakeLists.txt index 03ee5a037..03dca45f9 100644 --- a/vtkm/rendering/CMakeLists.txt +++ b/vtkm/rendering/CMakeLists.txt @@ -178,6 +178,7 @@ set(device_sources raytracing/SphereExtractor.cxx raytracing/SphereIntersector.cxx raytracing/TriangleExtractor.cxx + raytracing/TriangleIntersector.cxx raytracing/VolumeRendererStructured.cxx ) diff --git a/vtkm/rendering/ConnectivityProxy.cxx b/vtkm/rendering/ConnectivityProxy.cxx index 245af777a..661abb9db 100644 --- a/vtkm/rendering/ConnectivityProxy.cxx +++ b/vtkm/rendering/ConnectivityProxy.cxx @@ -68,6 +68,9 @@ public: ~InternalsType() {} + VTKM_CONT + void SetUnitScalar(vtkm::Float32 unitScalar) { Tracer.SetUnitScalar(unitScalar); } + void SetSampleDistance(const vtkm::Float32& distance) { if (Mode != VOLUME_MODE) @@ -119,7 +122,12 @@ public: vtkm::Bounds GetSpatialBounds() const { return SpatialBounds; } VTKM_CONT - vtkm::Range GetScalarRange() const { return ScalarRange; } + vtkm::Range GetScalarFieldRange() + { + const vtkm::cont::ArrayHandle range = this->ScalarField.GetRange(); + ScalarRange = range.GetPortalConstControl().Get(0); + return ScalarRange; + } VTKM_CONT void SetScalarRange(const vtkm::Range& range) { ScalarRange = range; } @@ -141,7 +149,7 @@ public: this->EmissionField); } - Tracer.Trace(rays); + Tracer.FullTrace(rays); } VTKM_CONT @@ -160,7 +168,46 @@ public: this->EmissionField); } - Tracer.Trace(rays); + Tracer.FullTrace(rays); + } + + VTKM_CONT + PartialVector64 PartialTrace(vtkm::rendering::raytracing::Ray& rays) + { + + if (Mode == VOLUME_MODE) + { + Tracer.SetVolumeData(this->ScalarField, this->ScalarRange, this->Cells, this->Coords); + } + else + { + Tracer.SetEnergyData(this->ScalarField, + rays.Buffers.at(0).GetNumChannels(), + this->Cells, + this->Coords, + this->EmissionField); + } + + return Tracer.PartialTrace(rays); + } + + VTKM_CONT + PartialVector32 PartialTrace(vtkm::rendering::raytracing::Ray& rays) + { + if (Mode == VOLUME_MODE) + { + Tracer.SetVolumeData(this->ScalarField, this->ScalarRange, this->Cells, this->Coords); + } + else + { + Tracer.SetEnergyData(this->ScalarField, + rays.Buffers.at(0).GetNumChannels(), + this->Cells, + this->Coords, + this->EmissionField); + } + + return Tracer.PartialTrace(rays); } VTKM_CONT @@ -188,7 +235,7 @@ public: throw vtkm::cont::ErrorBadValue("ENERGY MODE Not implemented for this use case\n"); } - Tracer.Trace(rays); + Tracer.FullTrace(rays); canvas->WriteToCanvas(rays, rays.Buffers.at(0).Buffer, camera); if (CompositeBackground) @@ -266,9 +313,9 @@ vtkm::Bounds ConnectivityProxy::GetSpatialBounds() } VTKM_CONT -vtkm::Range ConnectivityProxy::GetScalarRange() +vtkm::Range ConnectivityProxy::GetScalarFieldRange() { - return Internals->GetScalarRange(); + return Internals->GetScalarFieldRange(); } VTKM_CONT @@ -301,6 +348,27 @@ void ConnectivityProxy::Trace(vtkm::rendering::raytracing::Ray& r logger->CloseLogEntry(-1.0); } +VTKM_CONT +PartialVector32 ConnectivityProxy::PartialTrace( + vtkm::rendering::raytracing::Ray& rays) +{ + raytracing::Logger* logger = raytracing::Logger::GetInstance(); + logger->OpenLogEntry("connectivity_trace_32"); + if (Internals->GetRenderMode() == VOLUME_MODE) + { + logger->AddLogData("volume_mode", "true"); + } + else + { + logger->AddLogData("volume_mode", "false"); + } + + PartialVector32 res = Internals->PartialTrace(rays); + + logger->CloseLogEntry(-1.0); + return res; +} + VTKM_CONT void ConnectivityProxy::Trace(vtkm::rendering::raytracing::Ray& rays) { @@ -320,6 +388,27 @@ void ConnectivityProxy::Trace(vtkm::rendering::raytracing::Ray& r logger->CloseLogEntry(-1.0); } +VTKM_CONT +PartialVector64 ConnectivityProxy::PartialTrace( + vtkm::rendering::raytracing::Ray& rays) +{ + raytracing::Logger* logger = raytracing::Logger::GetInstance(); + logger->OpenLogEntry("connectivity_trace_64"); + if (Internals->GetRenderMode() == VOLUME_MODE) + { + logger->AddLogData("volume_mode", "true"); + } + else + { + logger->AddLogData("volume_mode", "false"); + } + + PartialVector64 res = Internals->PartialTrace(rays); + + logger->CloseLogEntry(-1.0); + return res; +} + VTKM_CONT void ConnectivityProxy::Trace(const vtkm::rendering::Camera& camera, vtkm::rendering::CanvasRayTracer* canvas) @@ -332,10 +421,17 @@ void ConnectivityProxy::Trace(const vtkm::rendering::Camera& camera, logger->CloseLogEntry(-1.0); } + VTKM_CONT void ConnectivityProxy::SetDebugPrints(bool on) { Internals->SetDebugPrints(on); } + +VTKM_CONT +void ConnectivityProxy::SetUnitScalar(vtkm::Float32 unitScalar) +{ + Internals->SetUnitScalar(unitScalar); +} } } // namespace vtkm::rendering diff --git a/vtkm/rendering/ConnectivityProxy.h b/vtkm/rendering/ConnectivityProxy.h index fec9634a7..ba73d9c94 100644 --- a/vtkm/rendering/ConnectivityProxy.h +++ b/vtkm/rendering/ConnectivityProxy.h @@ -26,6 +26,7 @@ #include #include #include +#include #include namespace vtkm @@ -33,6 +34,9 @@ namespace vtkm namespace rendering { +using PartialVector64 = std::vector>; +using PartialVector32 = std::vector>; + class VTKM_RENDERING_EXPORT ConnectivityProxy { public: @@ -57,14 +61,18 @@ public: void SetColorMap(vtkm::cont::ArrayHandle>& colormap); void SetCompositeBackground(bool on); void SetDebugPrints(bool on); + void SetUnitScalar(vtkm::Float32 unitScalar); vtkm::Bounds GetSpatialBounds(); - vtkm::Range GetScalarRange(); + vtkm::Range GetScalarFieldRange(); void Trace(const vtkm::rendering::Camera& camera, vtkm::rendering::CanvasRayTracer* canvas); void Trace(vtkm::rendering::raytracing::Ray& rays); void Trace(vtkm::rendering::raytracing::Ray& rays); + PartialVector64 PartialTrace(vtkm::rendering::raytracing::Ray& rays); + PartialVector32 PartialTrace(vtkm::rendering::raytracing::Ray& rays); + protected: struct InternalsType; struct BoundsFunctor; diff --git a/vtkm/rendering/MapperCylinder.cxx b/vtkm/rendering/MapperCylinder.cxx index 20ab009f2..0a176a314 100644 --- a/vtkm/rendering/MapperCylinder.cxx +++ b/vtkm/rendering/MapperCylinder.cxx @@ -29,12 +29,8 @@ #include #include #include -#include -#include #include #include -#include -#include #include namespace vtkm diff --git a/vtkm/rendering/MapperPoint.cxx b/vtkm/rendering/MapperPoint.cxx index 169120ef6..fa401d285 100644 --- a/vtkm/rendering/MapperPoint.cxx +++ b/vtkm/rendering/MapperPoint.cxx @@ -21,7 +21,6 @@ #include #include -#include #include #include @@ -31,7 +30,6 @@ #include #include #include -#include namespace vtkm { diff --git a/vtkm/rendering/MapperQuad.cxx b/vtkm/rendering/MapperQuad.cxx index 4c3f62192..f96c47b93 100644 --- a/vtkm/rendering/MapperQuad.cxx +++ b/vtkm/rendering/MapperQuad.cxx @@ -26,15 +26,11 @@ #include #include #include -#include -#include #include #include #include #include #include -#include -#include namespace vtkm { diff --git a/vtkm/rendering/raytracing/BVHTraverser.h b/vtkm/rendering/raytracing/BVHTraverser.h index e3b38c457..9b1dc6332 100644 --- a/vtkm/rendering/raytracing/BVHTraverser.h +++ b/vtkm/rendering/raytracing/BVHTraverser.h @@ -78,28 +78,13 @@ VTKM_EXEC inline bool IntersectAABB(const BVHPortalType& bvh, return (min0 > min1); } -template