Przeglądaj źródła

Merge pull request #474 from Eric89GXL/fsaa

Add static method to set multisampling
Julien Finet 11 lat temu
rodzic
commit
8393079977

+ 22 - 5
Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.cpp

@@ -37,6 +37,8 @@
 //--------------------------------------------------------------------------
 static ctkLogger logger("org.commontk.visualization.vtk.widgets.ctkVTKAbstractView");
 //--------------------------------------------------------------------------
+bool ctkVTKAbstractViewPrivate::UseMultiSamples = false;  // Default for static var
+//--------------------------------------------------------------------------
 
 // --------------------------------------------------------------------------
 // ctkVTKAbstractViewPrivate methods
@@ -98,7 +100,9 @@ void ctkVTKAbstractViewPrivate::setupRendering()
 {
   Q_ASSERT(this->RenderWindow);
   this->RenderWindow->SetAlphaBitPlanes(1);
-  this->RenderWindow->SetMultiSamples(0);
+  const int maxSamples = vtkOpenGLRenderWindow::GetGlobalMaximumNumberOfMultiSamples();
+  this->RenderWindow->SetMultiSamples(
+      ctkVTKAbstractView::useMultiSamples() ? maxSamples : 0);
   this->RenderWindow->StereoCapableWindowOn();
 
   this->VTKWidget->SetRenderWindow(this->RenderWindow);
@@ -445,7 +449,7 @@ bool ctkVTKAbstractView::useDepthPeeling()const
 }
 
 //----------------------------------------------------------------------------
-void ctkVTKAbstractView::setUseDepthPeeling(bool use)
+void ctkVTKAbstractView::setUseDepthPeeling(bool useDepthPeeling)
 {
   Q_D(ctkVTKAbstractView);
   vtkRenderer* renderer = d->firstRenderer();
@@ -453,8 +457,21 @@ void ctkVTKAbstractView::setUseDepthPeeling(bool use)
     {
     return;
     }
-  this->renderWindow()->SetAlphaBitPlanes( use ? 1 : 0);
+  this->renderWindow()->SetAlphaBitPlanes( useDepthPeeling ? 1 : 0);
+  const int maxSamples = vtkOpenGLRenderWindow::GetGlobalMaximumNumberOfMultiSamples();
   this->renderWindow()->SetMultiSamples(
-    use ? 0 : vtkOpenGLRenderWindow::GetGlobalMaximumNumberOfMultiSamples());
-  renderer->SetUseDepthPeeling(use ? 1 : 0);
+    (useDepthPeeling || !ctkVTKAbstractView::useMultiSamples()) ? 0 : maxSamples);
+  renderer->SetUseDepthPeeling(useDepthPeeling ? 1 : 0);
+}
+
+//----------------------------------------------------------------------------
+bool ctkVTKAbstractView::useMultiSamples()
+{
+  return ctkVTKAbstractViewPrivate::UseMultiSamples;
+}
+
+//----------------------------------------------------------------------------
+void ctkVTKAbstractView::setUseMultiSamples(bool use)
+{
+  ctkVTKAbstractViewPrivate::UseMultiSamples = use;
 }

+ 12 - 0
Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.h

@@ -141,6 +141,18 @@ public:
   /// \sa useDepthPeeling
   bool useDepthPeeling()const;
 
+  /// Set multisampling default.
+  /// WARNING: Multisampling should be set *before* creation of the
+  /// OpenGL context (e.g., initializing the rendering window) in order
+  /// to have an effect. Consider using setUseMultisamples before
+  /// instantiating ctkVTKAbstractView objects.
+  /// \sa useMultiSamples
+  static void setUseMultiSamples(bool);
+
+  /// Return the current multisamples default
+  /// \sa setUseMultiSamples()
+  static bool useMultiSamples();
+
   virtual QSize minimumSizeHint()const;
   virtual QSize sizeHint()const;
   virtual bool hasHeightForWidth()const;

+ 1 - 0
Libs/Visualization/VTK/Widgets/ctkVTKAbstractView_p.h

@@ -65,6 +65,7 @@ public:
   bool                                          FPSVisible;
   QTimer*                                       FPSTimer;
   int                                           FPS;
+  static bool                                   UseMultiSamples;
 
   vtkSmartPointer<vtkCornerAnnotation>          CornerAnnotation;
 };