@@ -62,6 +62,7 @@ vtkStandardNewMacro(SmartVolumeMapper)
6262{
6363 // NOTE: Due to a bug in vtkMultiVolume, a gradient opacity function must be
6464 // set or the shader will fail to compile.
65+ // (likely fixed in https://gitlab.kitware.com/vtk/vtk/-/merge_requests/8909)
6566 m_gradientOpacity->AddPoint (0.0 , 1.0 );
6667 connect (&HistogramManager::instance (), &HistogramManager::histogram2DReady,
6768 this , [=](vtkSmartPointer<vtkImageData> image,
@@ -81,6 +82,12 @@ vtkStandardNewMacro(SmartVolumeMapper)
8182 this ->updateColorMap ();
8283 emit this ->renderNeeded ();
8384 });
85+
86+ // NOTE: Due to a bug in vtkMultiVolume, a gradient opacity function must
87+ // be set or the shader will fail to compile.
88+ // (likely fixed in https://gitlab.kitware.com/vtk/vtk/-/merge_requests/8909)
89+ connect (&VolumeManager::instance (), &VolumeManager::usingMultiVolumeChanged,
90+ this , &ModuleVolume::updateColorMap);
8491}
8592
8693ModuleVolume::~ModuleVolume ()
@@ -371,9 +378,20 @@ void ModuleVolume::updateColorMap()
371378 int propertyMode = vtkVolumeProperty::TF_1D;
372379 const Module::TransferMode mode = getTransferMode ();
373380 switch (mode) {
374- case (Module::SCALAR):
375- m_volumeProperty->SetGradientOpacity (m_gradientOpacity);
381+ case (Module::SCALAR): {
382+ // NOTE: Due to a bug in vtkMultiVolume, a gradient opacity function must
383+ // be set or the shader will fail to compile.
384+ // (likely fixed in
385+ // https://gitlab.kitware.com/vtk/vtk/-/merge_requests/8909)
386+ bool usingMultiVolume =
387+ VolumeManager::instance ().usingMultiVolume (this ->view ());
388+ if (usingMultiVolume) {
389+ m_volumeProperty->SetGradientOpacity (m_gradientOpacity);
390+ } else {
391+ m_volumeProperty->SetGradientOpacity (nullptr );
392+ }
376393 break ;
394+ }
377395 case (Module::GRADIENT_1D):
378396 m_volumeProperty->SetGradientOpacity (gradientOpacityMap ());
379397 break ;
0 commit comments