From 1f6ef23b98ce8841d9d63146f38e7e5e1450e11d Mon Sep 17 00:00:00 2001 From: Matt Larsen Date: Thu, 9 Feb 2017 16:26:23 -0800 Subject: [PATCH] adding the ability to turn off background compositing for volume renderer --- vtkm/rendering/MapperVolume.cxx | 10 +++++++++- vtkm/rendering/MapperVolume.h | 1 + .../raytracing/VolumeRendererStructured.h | 16 ++++++++++++---- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/vtkm/rendering/MapperVolume.cxx b/vtkm/rendering/MapperVolume.cxx index af336f16d..cba681df1 100644 --- a/vtkm/rendering/MapperVolume.cxx +++ b/vtkm/rendering/MapperVolume.cxx @@ -40,6 +40,7 @@ struct MapperVolume::InternalsType { vtkm::rendering::CanvasRayTracer *Canvas; vtkm::Float32 SampleDistance; + bool CompositeBackground; vtkm::cont::internal::RuntimeDeviceTracker DeviceTracker; std::shared_ptr RayTracerContainer; @@ -47,7 +48,8 @@ struct MapperVolume::InternalsType VTKM_CONT InternalsType() : Canvas(nullptr), - SampleDistance(-1.f) + SampleDistance(-1.f), + CompositeBackground(true) { } template @@ -149,6 +151,7 @@ struct MapperVolume::RenderFunctor tracer->GetCamera().SetParameters(this->Camera, *this->Self->Internals->Canvas); tracer->SetSampleDistance(this->Self->Internals->SampleDistance); + tracer->SetCompositeBackground(this->Self->Internals->CompositeBackground); vtkm::Bounds dataBounds = this->Coordinates.GetBounds(Device()); tracer->SetData(this->Coordinates, @@ -213,5 +216,10 @@ void MapperVolume::SetSampleDistance(const vtkm::Float32 sampleDistance) this->Internals->SampleDistance = sampleDistance; } +void MapperVolume::SetCompositeBackground(const bool compositeBackground) +{ + this->Internals->CompositeBackground = compositeBackground; +} + } } // namespace vtkm::rendering diff --git a/vtkm/rendering/MapperVolume.h b/vtkm/rendering/MapperVolume.h index 82fbc89ee..c76e6c345 100644 --- a/vtkm/rendering/MapperVolume.h +++ b/vtkm/rendering/MapperVolume.h @@ -49,6 +49,7 @@ public: vtkm::rendering::Mapper *NewCopy() const VTKM_OVERRIDE; void SetSampleDistance(const vtkm::Float32 distance); + void SetCompositeBackground(const bool compositeBackground); private: struct InternalsType; std::shared_ptr Internals; diff --git a/vtkm/rendering/raytracing/VolumeRendererStructured.h b/vtkm/rendering/raytracing/VolumeRendererStructured.h index 9ac686d6c..a0de1a6a0 100644 --- a/vtkm/rendering/raytracing/VolumeRendererStructured.h +++ b/vtkm/rendering/raytracing/VolumeRendererStructured.h @@ -943,6 +943,7 @@ class SamplerCellAssocRect : public vtkm::worklet::WorkletMapField IsSceneDirty = false; IsUniformDataSet = true; SampleDistance = -1.f; + DoCompositeBackground = false; } VTKM_CONT @@ -1078,10 +1079,11 @@ class SamplerCellAssocRect : public vtkm::worklet::WorkletMapField } } - - vtkm::worklet::DispatcherMapField< CompositeBackground >( CompositeBackground( BackgroundColor ) ) - .Invoke( camera.FrameBuffer ); - + if(DoCompositeBackground) + { + vtkm::worklet::DispatcherMapField< CompositeBackground >( CompositeBackground( BackgroundColor ) ) + .Invoke( camera.FrameBuffer ); + } camera.WriteToSurface(canvas, Rays.MinDistance); } //Render @@ -1099,9 +1101,15 @@ class SamplerCellAssocRect : public vtkm::worklet::WorkletMapField BackgroundColor = backgroundColor; } + void SetCompositeBackground(bool compositeBackground) + { + DoCompositeBackground = compositeBackground; + } + protected: bool IsSceneDirty; bool IsUniformDataSet; + bool DoCompositeBackground; VolumeRay Rays; Camera camera; vtkm::cont::DynamicArrayHandleCoordinateSystem Coordinates;