From 3e4549241de2cba421bddfbfd58b2b53fb031187 Mon Sep 17 00:00:00 2001 From: "David C. Lonie" <david.lonie@kitware.com> Date: Tue, 20 Sep 2016 16:26:50 -0400 Subject: [PATCH] Add FXAA to vtkSynchronizedRenderers. --- .../Parallel/vtkSynchronizedRenderers.cxx | 40 +++++++++++++++++++ Rendering/Parallel/vtkSynchronizedRenderers.h | 18 +++++++++ 2 files changed, 58 insertions(+) diff --git a/Rendering/Parallel/vtkSynchronizedRenderers.cxx b/Rendering/Parallel/vtkSynchronizedRenderers.cxx index dd24d9a4f02..9dcf6fc21ca 100644 --- a/Rendering/Parallel/vtkSynchronizedRenderers.cxx +++ b/Rendering/Parallel/vtkSynchronizedRenderers.cxx @@ -18,6 +18,7 @@ #include "vtkCamera.h" #include "vtkCommand.h" #include "vtkCommunicator.h" +#include "vtkFXAAOptions.h" #include "vtkImageData.h" #include "vtkMatrix4x4.h" #include "vtkMultiProcessController.h" @@ -32,10 +33,14 @@ #ifndef VTK_OPENGL2 # include "vtkgl.h" +#else // VTK_OPENGL2 +#include "vtkOpenGLFXAAFilter.h" #endif #include <cassert> +vtkCxxSetObjectMacro(vtkSynchronizedRenderers, FXAAOptions, vtkFXAAOptions) + //---------------------------------------------------------------------------- class vtkSynchronizedRenderers::vtkObserver : public vtkCommand { @@ -82,6 +87,10 @@ vtkSynchronizedRenderers::vtkSynchronizedRenderers() this->Observer = vtkSynchronizedRenderers::vtkObserver::New(); this->Observer->Target = this; + this->UseFXAA = false; + this->FXAAOptions = vtkFXAAOptions::New(); + this->FXAAFilter = NULL; + this->Renderer = 0; this->ParallelController = 0; this->ParallelRendering = true; @@ -105,6 +114,21 @@ vtkSynchronizedRenderers::~vtkSynchronizedRenderers() this->SetParallelController(0); this->Observer->Delete(); this->Observer = 0; + + if (this->FXAAOptions) + { + this->FXAAOptions->Delete(); + this->FXAAOptions = NULL; + } + + // vtkOpenGLFXAAFilter is only available on opengl2: +#ifdef VTK_OPENGL2 + if (this->FXAAFilter) + { + this->FXAAFilter->Delete(); + this->FXAAFilter = NULL; + } +#endif // VTK_OPENGL2 } //---------------------------------------------------------------------------- @@ -286,6 +310,22 @@ void vtkSynchronizedRenderers::PushImageToScreen() } rawImage.PushToViewport(this->Renderer); + +#ifdef VTK_OPENGL2 + if (this->UseFXAA) + { + if (!this->FXAAFilter) + { + this->FXAAFilter = vtkOpenGLFXAAFilter::New(); + } + if (this->FXAAOptions) + { + this->FXAAFilter->UpdateConfiguration(this->FXAAOptions); + } + this->FXAAFilter->Execute(this->Renderer); + } +#endif // VTK_OPENGL2 + } ////---------------------------------------------------------------------------- diff --git a/Rendering/Parallel/vtkSynchronizedRenderers.h b/Rendering/Parallel/vtkSynchronizedRenderers.h index e96e00fb1f4..15f4a314bf1 100644 --- a/Rendering/Parallel/vtkSynchronizedRenderers.h +++ b/Rendering/Parallel/vtkSynchronizedRenderers.h @@ -31,9 +31,11 @@ #include "vtkUnsignedCharArray.h" // needed for vtkUnsignedCharArray. #include "vtkSmartPointer.h" // needed for vtkSmartPointer. +class vtkFXAAOptions; class vtkRenderer; class vtkMultiProcessController; class vtkMultiProcessStream; +class vtkOpenGLFXAAFilter; class vtkOpenGLRenderer; class VTKRENDERINGPARALLEL_EXPORT vtkSynchronizedRenderers : public vtkObject @@ -77,6 +79,18 @@ public: vtkGetMacro(WriteBackImages, bool); vtkBooleanMacro(WriteBackImages, bool); + // Description: + // Enable FXAA antialiasing. FXAA is applied after all rendering results are + // composited into the final image. + vtkSetMacro(UseFXAA, bool) + vtkGetMacro(UseFXAA, bool) + vtkBooleanMacro(UseFXAA, bool) + + // Description: + // The configuration options for FXAA antialiasing. + vtkGetObjectMacro(FXAAOptions, vtkFXAAOptions) + virtual void SetFXAAOptions(vtkFXAAOptions*); + // Description: // Get/Set the root-process id. This is required when the ParallelController // is a vtkSocketController. Set to 0 by default (which will not work when @@ -198,6 +212,10 @@ protected: void CopyTo(vtkRenderer*); }; + bool UseFXAA; + vtkFXAAOptions *FXAAOptions; + vtkOpenGLFXAAFilter *FXAAFilter; + // These methods are called on all processes as a consequence of corresponding // events being called on the renderer. virtual void HandleStartRender(); -- GitLab