From 5a1685d8aae7e710e308f60f9d7fdce0c45f2c33 Mon Sep 17 00:00:00 2001 From: Matt Larsen Date: Tue, 30 Oct 2018 07:46:42 -0700 Subject: [PATCH] updates to the connectivity tracer --- vtkm/rendering/CMakeLists.txt | 1 + vtkm/rendering/ConnectivityProxy.cxx | 108 +- vtkm/rendering/ConnectivityProxy.h | 10 +- vtkm/rendering/MapperCylinder.cxx | 4 - vtkm/rendering/MapperPoint.cxx | 2 - vtkm/rendering/MapperQuad.cxx | 4 - vtkm/rendering/raytracing/BVHTraverser.h | 62 +- vtkm/rendering/raytracing/CMakeLists.txt | 2 + vtkm/rendering/raytracing/CellIntersector.h | 3 +- vtkm/rendering/raytracing/ChannelBuffer.cxx | 9 + vtkm/rendering/raytracing/ChannelBuffer.h | 2 + .../raytracing/ChannelBufferOperations.h | 12 +- .../raytracing/ConnectivityTracer.cxx | 1301 ++++++++++++++++- .../rendering/raytracing/ConnectivityTracer.h | 108 +- .../raytracing/ConnectivityTracer.hxx | 1276 ---------------- .../raytracing/CylinderIntersector.cxx | 186 ++- .../raytracing/CylinderIntersector.h | 143 +- .../raytracing/MeshConnectivityBase.h | 34 +- .../raytracing/MeshConnectivityBuilder.cxx | 81 +- .../raytracing/MeshConnectivityBuilder.h | 4 +- .../raytracing/MeshConnectivityContainers.cxx | 84 +- .../raytracing/MeshConnectivityContainers.h | 16 +- vtkm/rendering/raytracing/QuadIntersector.cxx | 141 +- vtkm/rendering/raytracing/QuadIntersector.h | 107 +- vtkm/rendering/raytracing/RayOperations.h | 47 +- .../raytracing/SphereIntersector.cxx | 44 +- vtkm/rendering/raytracing/SphereIntersector.h | 4 +- .../raytracing/TriangleIntersector.h | 891 +---------- 28 files changed, 1996 insertions(+), 2690 deletions(-) delete mode 100644 vtkm/rendering/raytracing/ConnectivityTracer.hxx 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