VTK
vtkOpenGLFXAAFilter.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkOpenGLFXAAFilter.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
15 
40 #ifndef vtkOpenGLFXAAFilter_h
41 #define vtkOpenGLFXAAFilter_h
42 
43 #include "vtkRenderingOpenGL2Module.h" // For export macro
44 #include "vtkObject.h"
45 #include "vtkFXAAOptions.h" // For DebugOptions enum
46 
47 #include <string> // For std::string
48 
49 class vtkFXAAOptions;
52 class vtkOpenGLRenderer;
54 class vtkShaderProgram;
55 class vtkTextureObject;
56 
57 class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLFXAAFilter: public vtkObject
58 {
59 public:
60  static vtkOpenGLFXAAFilter* New();
62  virtual void PrintSelf(ostream &os, vtkIndent indent);
63 
67  void Execute(vtkOpenGLRenderer *ren);
68 
72  void ReleaseGraphicsResources();
73 
79  void UpdateConfiguration(vtkFXAAOptions *opts);
80 
82 
86  vtkSetClampMacro(RelativeContrastThreshold, float, 0.f, 1.f)
87  vtkGetMacro(RelativeContrastThreshold, float)
88  vtkSetClampMacro(HardContrastThreshold, float, 0.f, 1.f)
89  vtkGetMacro(HardContrastThreshold, float)
90  vtkSetClampMacro(SubpixelBlendLimit, float, 0.f, 1.f)
91  vtkGetMacro(SubpixelBlendLimit, float)
92  vtkSetClampMacro(SubpixelContrastThreshold, float, 0.f, 1.f)
93  vtkGetMacro(SubpixelContrastThreshold, float)
94  virtual void SetUseHighQualityEndpoints(bool val);
95  vtkGetMacro(UseHighQualityEndpoints, bool)
96  vtkBooleanMacro(UseHighQualityEndpoints, bool)
97  vtkSetClampMacro(EndpointSearchIterations, int, 0, VTK_INT_MAX)
98  vtkGetMacro(EndpointSearchIterations, int)
99  virtual void SetDebugOptionValue(vtkFXAAOptions::DebugOption opt);
100  vtkGetMacro(DebugOptionValue, vtkFXAAOptions::DebugOption)
102 
103 protected:
105  ~vtkOpenGLFXAAFilter();
106 
107  void Prepare();
108  void FreeGLObjects();
109  void CreateGLObjects();
110  void LoadInput();
111  void ApplyFilter();
112  void SubstituteFragmentShader(std::string &fragShader);
113  void Finalize();
114 
115  void StartTimeQuery(vtkOpenGLRenderTimer *timer);
116  void EndTimeQuery(vtkOpenGLRenderTimer *timer);
117  void PrintBenchmark();
118 
119  // Cache GL state that we modify
120  bool BlendState;
121  bool DepthTestState;
122 
123  int Viewport[4]; // x, y, width, height
124 
125  // Used to measure execution time:
126  vtkOpenGLRenderTimer *PreparationTimer;
128 
129  // Parameters:
130  float RelativeContrastThreshold;
131  float HardContrastThreshold;
132  float SubpixelBlendLimit;
133  float SubpixelContrastThreshold;
134  int EndpointSearchIterations;
135 
136  bool UseHighQualityEndpoints;
137  vtkFXAAOptions::DebugOption DebugOptionValue;
138 
139  // Set to true when the shader definitions change so we know when to rebuild.
140  bool NeedToRebuildShader;
141 
142  vtkOpenGLRenderer *Renderer;
144 
148 
149 private:
150  vtkOpenGLFXAAFilter(const vtkOpenGLFXAAFilter&) VTK_DELETE_FUNCTION;
151  void operator=(const vtkOpenGLFXAAFilter&) VTK_DELETE_FUNCTION;
152 };
153 
154 #endif // vtkOpenGLFXAAFilter_h
abstract base class for most VTK objects
Definition: vtkObject.h:59
#define VTK_INT_MAX
Definition: vtkType.h:153
a simple class to control print indentation
Definition: vtkIndent.h:39
The VertexArrayObject class uses, or emulates, vertex array objects.
abstracts an OpenGL texture object.
OpenGL buffer object.
Perform FXAA antialiasing on the current framebuffer.
vtkBooleanMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
OpenGL renderer.
Asynchronously measures GPU execution time.
Configuration for FXAA implementations.
The ShaderProgram uses one or more Shader objects.