Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Michael Fogleman
VTK
Commits
c3f96385
Commit
c3f96385
authored
Sep 20, 2016
by
David C. Lonie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add a vtkFXAAOptions class for storing FXAA config.
This will simplify the API for vtkRenderer, vtkSynchronizedRenderer, etc.
parent
fc9878ef
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
354 additions
and
158 deletions
+354
-158
Rendering/Core/CMakeLists.txt
Rendering/Core/CMakeLists.txt
+1
-0
Rendering/Core/vtkFXAAOptions.cxx
Rendering/Core/vtkFXAAOptions.cxx
+86
-0
Rendering/Core/vtkFXAAOptions.h
Rendering/Core/vtkFXAAOptions.h
+172
-0
Rendering/Core/vtkRenderer.cxx
Rendering/Core/vtkRenderer.cxx
+9
-7
Rendering/Core/vtkRenderer.h
Rendering/Core/vtkRenderer.h
+6
-26
Rendering/OpenGL2/Testing/Cxx/TestFXAAFilter.cxx
Rendering/OpenGL2/Testing/Cxx/TestFXAAFilter.cxx
+1
-0
Rendering/OpenGL2/vtkOpenGLFXAAFilter.cxx
Rendering/OpenGL2/vtkOpenGLFXAAFilter.cxx
+62
-3
Rendering/OpenGL2/vtkOpenGLFXAAFilter.h
Rendering/OpenGL2/vtkOpenGLFXAAFilter.h
+13
-107
Rendering/OpenGL2/vtkOpenGLRenderer.cxx
Rendering/OpenGL2/vtkOpenGLRenderer.cxx
+4
-15
No files found.
Rendering/Core/CMakeLists.txt
View file @
c3f96385
...
...
@@ -25,6 +25,7 @@ set(Module_SRCS
vtkFollower.cxx
vtkFrameBufferObjectBase.cxx
vtkFrustumCoverageCuller.cxx
vtkFXAAOptions.cxx
vtkGenericRenderWindowInteractor.cxx
vtkGenericVertexAttributeMapping.cxx
vtkGlyph3DMapper.cxx
...
...
Rendering/Core/vtkFXAAOptions.cxx
0 → 100644
View file @
c3f96385
/*=========================================================================
Program: Visualization Toolkit
Module: vtkFXAAOptions.cxx
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include "vtkFXAAOptions.h"
#include "vtkObjectFactory.h"
vtkStandardNewMacro
(
vtkFXAAOptions
)
//------------------------------------------------------------------------------
void
vtkFXAAOptions
::
PrintSelf
(
std
::
ostream
&
os
,
vtkIndent
indent
)
{
this
->
Superclass
::
PrintSelf
(
os
,
indent
);
os
<<
indent
<<
"RelativeContrastThreshold: "
<<
this
->
RelativeContrastThreshold
<<
"
\n
"
;
os
<<
indent
<<
"HardContrastThreshold: "
<<
this
->
HardContrastThreshold
<<
"
\n
"
;
os
<<
indent
<<
"SubpixelBlendLimit: "
<<
this
->
SubpixelBlendLimit
<<
"
\n
"
;
os
<<
indent
<<
"SubpixelContrastThreshold: "
<<
this
->
SubpixelContrastThreshold
<<
"
\n
"
;
os
<<
indent
<<
"EndpointSearchIterations: "
<<
this
->
EndpointSearchIterations
<<
"
\n
"
;
os
<<
indent
<<
"UseHighQualityEndpoints: "
<<
this
->
UseHighQualityEndpoints
<<
"
\n
"
;
os
<<
indent
<<
"DebugOptionValue: "
;
switch
(
this
->
DebugOptionValue
)
{
default:
case
vtkFXAAOptions
::
FXAA_NO_DEBUG
:
os
<<
"FXAA_NO_DEBUG
\n
"
;
break
;
case
vtkFXAAOptions
::
FXAA_DEBUG_SUBPIXEL_ALIASING
:
os
<<
"FXAA_DEBUG_SUBPIXEL_ALIASING
\n
"
;
break
;
case
vtkFXAAOptions
::
FXAA_DEBUG_EDGE_DIRECTION
:
os
<<
"FXAA_DEBUG_EDGE_DIRECTION
\n
"
;
break
;
case
vtkFXAAOptions
::
FXAA_DEBUG_EDGE_NUM_STEPS
:
os
<<
"FXAA_DEBUG_EDGE_NUM_STEPS
\n
"
;
break
;
case
vtkFXAAOptions
::
FXAA_DEBUG_EDGE_DISTANCE
:
os
<<
"FXAA_DEBUG_EDGE_DISTANCE
\n
"
;
break
;
case
vtkFXAAOptions
::
FXAA_DEBUG_EDGE_SAMPLE_OFFSET
:
os
<<
"FXAA_DEBUG_EDGE_SAMPLE_OFFSET
\n
"
;
break
;
case
vtkFXAAOptions
::
FXAA_DEBUG_ONLY_SUBPIX_AA
:
os
<<
"FXAA_DEBUG_ONLY_SUBPIX_AA
\n
"
;
break
;
case
vtkFXAAOptions
::
FXAA_DEBUG_ONLY_EDGE_AA
:
os
<<
"FXAA_DEBUG_ONLY_EDGE_AA
\n
"
;
break
;
}
}
//------------------------------------------------------------------------------
vtkFXAAOptions
::
vtkFXAAOptions
()
:
RelativeContrastThreshold
(
1.
f
/
8.
f
),
HardContrastThreshold
(
1.
f
/
16.
f
),
SubpixelBlendLimit
(
3.
f
/
4.
f
),
SubpixelContrastThreshold
(
1.
f
/
4.
f
),
EndpointSearchIterations
(
12
),
UseHighQualityEndpoints
(
true
),
DebugOptionValue
(
vtkFXAAOptions
::
FXAA_NO_DEBUG
)
{
}
//------------------------------------------------------------------------------
vtkFXAAOptions
::~
vtkFXAAOptions
()
{
}
Rendering/Core/vtkFXAAOptions.h
0 → 100644
View file @
c3f96385
/*=========================================================================
Program: Visualization Toolkit
Module: vtkFXAAOptions.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkFXAAOptions - Configuration for FXAA implementations.
//
// .SECTION Description
// This class encapsulates the settings for vtkOpenGLFXAAFilter.
#ifndef vtkFXAAOptions_h
#define vtkFXAAOptions_h
#include "vtkRenderingCoreModule.h" // For export macro
#include "vtkObject.h"
class
VTKRENDERINGCORE_EXPORT
vtkFXAAOptions
:
public
vtkObject
{
public:
// Description:
// Debugging options that affect the output color buffer. See
// vtkFXAAFilterFS.glsl for details.
enum
DebugOption
{
FXAA_NO_DEBUG
=
0
,
FXAA_DEBUG_SUBPIXEL_ALIASING
,
FXAA_DEBUG_EDGE_DIRECTION
,
FXAA_DEBUG_EDGE_NUM_STEPS
,
FXAA_DEBUG_EDGE_DISTANCE
,
FXAA_DEBUG_EDGE_SAMPLE_OFFSET
,
FXAA_DEBUG_ONLY_SUBPIX_AA
,
FXAA_DEBUG_ONLY_EDGE_AA
};
static
vtkFXAAOptions
*
New
();
vtkTypeMacro
(
vtkFXAAOptions
,
vtkObject
)
virtual
void
PrintSelf
(
ostream
&
os
,
vtkIndent
indent
);
// Description:
// Threshold for applying FXAA to a pixel, relative to the maximum luminosity
// of its 4 immediate neighbors.
//
// The luminosity of the current pixel and it's NSWE neighbors is computed.
// The maximum luminosity and luminosity range (contrast) of all 5 pixels is
// found. If the contrast is less than RelativeContrastThreshold * maxLum,
// the pixel is not considered aliased and will not be affected by FXAA.
//
// Suggested settings:
// - 1/3: Too little
// - 1/4: Low quality
// - 1/8: High quality (default)
// - 1/16: Overkill
vtkSetClampMacro
(
RelativeContrastThreshold
,
float
,
0.
f
,
1.
f
)
vtkGetMacro
(
RelativeContrastThreshold
,
float
)
// Description:
// Similar to RelativeContrastThreshold, but not scaled by the maximum
// luminosity.
//
// If the contrast of the current pixel and it's 4 immediate NSWE neighbors is
// less than HardContrastThreshold, the pixel is not considered aliased and
// will not be affected by FXAA.
//
// Suggested settings:
// - 1/32: Visible limit
// - 1/16: High quality (default)
// - 1/12: Upper limit (start of visible unfiltered edges)
vtkSetClampMacro
(
HardContrastThreshold
,
float
,
0.
f
,
1.
f
)
vtkGetMacro
(
HardContrastThreshold
,
float
)
// Description:
// Subpixel aliasing is corrected by applying a lowpass filter to the current
// pixel. This is implemented by blending an average of the 3x3 neighborhood
// around the pixel into the final result. The amount of blending is
// determined by comparing the detected amount of subpixel aliasing to the
// total contrasting of the CNSWE pixels:
//
// SubpixelBlending = abs(lumC - lumAveNSWE) / (lumMaxCNSWE - lumMinCNSWE)
//
// This parameter sets an upper limit to the amount of subpixel blending to
// prevent the image from simply getting blurred.
//
// Suggested settings:
// - 1/2: Low amount of blending.
// - 3/4: Medium amount of blending (default)
// - 7/8: High amount of blending.
// - 1: Maximum amount of blending.
vtkSetClampMacro
(
SubpixelBlendLimit
,
float
,
0.
f
,
1.
f
)
vtkGetMacro
(
SubpixelBlendLimit
,
float
)
// Description:
// Minimum amount of subpixel aliasing required for subpixel antialiasing to
// be applied.
//
// Subpixel aliasing is corrected by applying a lowpass filter to the current
// pixel. This is implemented by blending an average of the 3x3 neighborhood
// around the pixel into the final result. The amount of blending is
// determined by comparing the detected amount of subpixel aliasing to the
// total contrasting of the CNSWE pixels:
//
// SubpixelBlending = abs(lumC - lumAveNSWE) / (lumMaxCNSWE - lumMinCNSWE)
//
// If SubpixelBlending is less than this threshold, no lowpass blending will
// occur.
//
// Suggested settings:
// - 1/2: Low subpixel aliasing removal
// - 1/3: Medium subpixel aliasing removal
// - 1/4: Default subpixel aliasing removal
// - 1/8: High subpixel aliasing removal
// - 0: Complete subpixel aliasing removal
vtkSetClampMacro
(
SubpixelContrastThreshold
,
float
,
0.
f
,
1.
f
)
vtkGetMacro
(
SubpixelContrastThreshold
,
float
)
// Description:
// Use an improved edge endpoint detection algorithm.
//
// If true, a modified edge endpoint detection algorithm is used that requires
// more texture lookups, but will properly detect aliased single-pixel lines.
//
// If false, the edge endpoint algorithm proposed by NVIDIA will by used. This
// algorithm is faster (fewer lookups), but will fail to detect endpoints of
// single pixel edge steps.
//
// Default setting is true.
vtkSetMacro
(
UseHighQualityEndpoints
,
bool
)
vtkGetMacro
(
UseHighQualityEndpoints
,
bool
)
vtkBooleanMacro
(
UseHighQualityEndpoints
,
bool
)
// Description:
// Set the number of iterations for the endpoint search algorithm. Increasing
// this value will increase runtime, but also properly detect longer edges.
// The current implementation steps one pixel in both the positive and
// negative directions per iteration. The default value is 12, which will
// resolve endpoints of edges < 25 pixels long (2 * 12 + 1).
vtkSetClampMacro
(
EndpointSearchIterations
,
int
,
0
,
VTK_INT_MAX
)
vtkGetMacro
(
EndpointSearchIterations
,
int
)
// Description:
// Debugging options that affect the output color buffer. See
// vtkFXAAFilterFS.glsl for details. Only one may be active at a time.
vtkSetMacro
(
DebugOptionValue
,
DebugOption
)
vtkGetMacro
(
DebugOptionValue
,
DebugOption
)
protected:
vtkFXAAOptions
();
~
vtkFXAAOptions
();
float
RelativeContrastThreshold
;
float
HardContrastThreshold
;
float
SubpixelBlendLimit
;
float
SubpixelContrastThreshold
;
int
EndpointSearchIterations
;
bool
UseHighQualityEndpoints
;
DebugOption
DebugOptionValue
;
private:
vtkFXAAOptions
(
const
vtkFXAAOptions
&
)
VTK_DELETE_FUNCTION
;
void
operator
=
(
const
vtkFXAAOptions
&
)
VTK_DELETE_FUNCTION
;
};
#endif // vtkFXAAOptions_h
Rendering/Core/vtkRenderer.cxx
View file @
c3f96385
...
...
@@ -22,6 +22,7 @@
#include "vtkCullerCollection.h"
#include "vtkCuller.h"
#include "vtkFrustumCoverageCuller.h"
#include "vtkFXAAOptions.h"
#include "vtkObjectFactory.h"
#include "vtkHardwareSelector.h"
#include "vtkInformation.h"
...
...
@@ -44,6 +45,7 @@ vtkCxxSetObjectMacro(vtkRenderer, Information, vtkInformation);
vtkCxxSetObjectMacro
(
vtkRenderer
,
Delegate
,
vtkRendererDelegate
);
vtkCxxSetObjectMacro
(
vtkRenderer
,
BackgroundTexture
,
vtkTexture
);
vtkCxxSetObjectMacro
(
vtkRenderer
,
Pass
,
vtkRenderPass
);
vtkCxxSetObjectMacro
(
vtkRenderer
,
FXAAOptions
,
vtkFXAAOptions
);
//----------------------------------------------------------------------------
// Return NULL if no override is supplied.
...
...
@@ -118,13 +120,7 @@ vtkRenderer::vtkRenderer()
this
->
GL2PSSpecialPropCollection
=
NULL
;
this
->
UseFXAA
=
false
;
this
->
FXAARelativeContrastThreshold
=
1.
f
/
8.
f
;
this
->
FXAAHardContrastThreshold
=
1.
f
/
16.
f
;
this
->
FXAASubpixelBlendLimit
=
3.
f
/
4.
f
;
this
->
FXAASubpixelContrastThreshold
=
1.
f
/
4.
f
;
this
->
FXAAEndpointSearchIterations
=
12
;
this
->
FXAAUseHighQualityEndpoints
=
true
;
this
->
FXAADebugOption
=
0
;
this
->
FXAAOptions
=
vtkFXAAOptions
::
New
();
this
->
UseShadows
=
0
;
...
...
@@ -175,6 +171,12 @@ vtkRenderer::~vtkRenderer()
this
->
Cullers
->
Delete
();
this
->
Cullers
=
NULL
;
if
(
this
->
FXAAOptions
!=
NULL
)
{
this
->
FXAAOptions
->
Delete
();
this
->
FXAAOptions
=
NULL
;
}
if
(
this
->
Delegate
!=
0
)
{
this
->
Delegate
->
UnRegister
(
this
);
...
...
Rendering/Core/vtkRenderer.h
View file @
c3f96385
...
...
@@ -35,6 +35,7 @@
#include "vtkVolumeCollection.h" // Needed for access in inline members
#include "vtkActorCollection.h" // Needed for access in inline members
class
vtkFXAAOptions
;
class
vtkRenderWindow
;
class
vtkVolume
;
class
vtkCuller
;
...
...
@@ -535,23 +536,9 @@ public:
vtkBooleanMacro
(
UseFXAA
,
bool
)
// Description:
// Tuning parameters for FXAA. See vtkOpenGLFXAAFilter.h for documentation
// and suggested values.
vtkSetClampMacro
(
FXAARelativeContrastThreshold
,
float
,
0.
f
,
1.
f
)
vtkGetMacro
(
FXAARelativeContrastThreshold
,
float
)
vtkSetClampMacro
(
FXAAHardContrastThreshold
,
float
,
0.
f
,
1.
f
)
vtkGetMacro
(
FXAAHardContrastThreshold
,
float
)
vtkSetClampMacro
(
FXAASubpixelBlendLimit
,
float
,
0.
f
,
1.
f
)
vtkGetMacro
(
FXAASubpixelBlendLimit
,
float
)
vtkSetClampMacro
(
FXAASubpixelContrastThreshold
,
float
,
0.
f
,
1.
f
)
vtkGetMacro
(
FXAASubpixelContrastThreshold
,
float
)
vtkSetClampMacro
(
FXAAEndpointSearchIterations
,
int
,
0
,
VTK_INT_MAX
)
vtkGetMacro
(
FXAAEndpointSearchIterations
,
int
)
vtkSetMacro
(
FXAAUseHighQualityEndpoints
,
bool
)
vtkGetMacro
(
FXAAUseHighQualityEndpoints
,
bool
)
vtkBooleanMacro
(
FXAAUseHighQualityEndpoints
,
bool
)
vtkSetMacro
(
FXAADebugOption
,
int
)
vtkGetMacro
(
FXAADebugOption
,
int
)
// The configuration object for FXAA antialiasing.
vtkGetObjectMacro
(
FXAAOptions
,
vtkFXAAOptions
)
virtual
void
SetFXAAOptions
(
vtkFXAAOptions
*
);
// Description:
// Turn on/off rendering of shadows if supported
...
...
@@ -722,15 +709,8 @@ protected:
bool
UseFXAA
;
// Description:
// Parameters for FXAA. See vtkOpenGLFXAAFilter.h for documentation and
// suggested values.
float
FXAARelativeContrastThreshold
;
float
FXAAHardContrastThreshold
;
float
FXAASubpixelBlendLimit
;
float
FXAASubpixelContrastThreshold
;
int
FXAAEndpointSearchIterations
;
bool
FXAAUseHighQualityEndpoints
;
int
FXAADebugOption
;
// Holds the FXAA configuration.
vtkFXAAOptions
*
FXAAOptions
;
// Description:
// If this flag is on and the rendering engine supports it render shadows
...
...
Rendering/OpenGL2/Testing/Cxx/TestFXAAFilter.cxx
View file @
c3f96385
...
...
@@ -21,6 +21,7 @@
#include "vtkConeSource.h"
#include "vtkCylinderSource.h"
#include "vtkDiskSource.h"
#include "vtkFXAAOptions.h"
#include "vtkLineSource.h"
#include "vtkNew.h"
#include "vtkOpenGLRenderer.h"
...
...
Rendering/OpenGL2/vtkOpenGLFXAAFilter.cxx
View file @
c3f96385
...
...
@@ -17,6 +17,7 @@
#include "vtk_glew.h"
#include "vtkFXAAOptions.h"
#include "vtkObjectFactory.h"
#include "vtkOpenGLBufferObject.h"
#include "vtkOpenGLError.h"
...
...
@@ -45,6 +46,49 @@ vtkStandardNewMacro(vtkOpenGLFXAAFilter)
void
vtkOpenGLFXAAFilter
::
PrintSelf
(
std
::
ostream
&
os
,
vtkIndent
indent
)
{
this
->
Superclass
::
PrintSelf
(
os
,
indent
);
os
<<
indent
<<
"RelativeContrastThreshold: "
<<
this
->
RelativeContrastThreshold
<<
"
\n
"
;
os
<<
indent
<<
"HardContrastThreshold: "
<<
this
->
HardContrastThreshold
<<
"
\n
"
;
os
<<
indent
<<
"SubpixelBlendLimit: "
<<
this
->
SubpixelBlendLimit
<<
"
\n
"
;
os
<<
indent
<<
"SubpixelContrastThreshold: "
<<
this
->
SubpixelContrastThreshold
<<
"
\n
"
;
os
<<
indent
<<
"EndpointSearchIterations: "
<<
this
->
EndpointSearchIterations
<<
"
\n
"
;
os
<<
indent
<<
"UseHighQualityEndpoints: "
<<
this
->
UseHighQualityEndpoints
<<
"
\n
"
;
os
<<
indent
<<
"DebugOptionValue: "
;
switch
(
this
->
DebugOptionValue
)
{
default:
case
vtkFXAAOptions
::
FXAA_NO_DEBUG
:
os
<<
"FXAA_NO_DEBUG
\n
"
;
break
;
case
vtkFXAAOptions
::
FXAA_DEBUG_SUBPIXEL_ALIASING
:
os
<<
"FXAA_DEBUG_SUBPIXEL_ALIASING
\n
"
;
break
;
case
vtkFXAAOptions
::
FXAA_DEBUG_EDGE_DIRECTION
:
os
<<
"FXAA_DEBUG_EDGE_DIRECTION
\n
"
;
break
;
case
vtkFXAAOptions
::
FXAA_DEBUG_EDGE_NUM_STEPS
:
os
<<
"FXAA_DEBUG_EDGE_NUM_STEPS
\n
"
;
break
;
case
vtkFXAAOptions
::
FXAA_DEBUG_EDGE_DISTANCE
:
os
<<
"FXAA_DEBUG_EDGE_DISTANCE
\n
"
;
break
;
case
vtkFXAAOptions
::
FXAA_DEBUG_EDGE_SAMPLE_OFFSET
:
os
<<
"FXAA_DEBUG_EDGE_SAMPLE_OFFSET
\n
"
;
break
;
case
vtkFXAAOptions
::
FXAA_DEBUG_ONLY_SUBPIX_AA
:
os
<<
"FXAA_DEBUG_ONLY_SUBPIX_AA
\n
"
;
break
;
case
vtkFXAAOptions
::
FXAA_DEBUG_ONLY_EDGE_AA
:
os
<<
"FXAA_DEBUG_ONLY_EDGE_AA
\n
"
;
break
;
}
}
//------------------------------------------------------------------------------
...
...
@@ -78,6 +122,20 @@ void vtkOpenGLFXAAFilter::ReleaseGraphicsResources()
this
->
FreeGLObjects
();
}
//------------------------------------------------------------------------------
void
vtkOpenGLFXAAFilter
::
UpdateConfiguration
(
vtkFXAAOptions
*
opts
)
{
// Use the setters -- some of these options will trigger a shader rebuild
// when they change, and the setters hold the logic for determining this.
this
->
SetRelativeContrastThreshold
(
opts
->
GetRelativeContrastThreshold
());
this
->
SetHardContrastThreshold
(
opts
->
GetHardContrastThreshold
());
this
->
SetSubpixelBlendLimit
(
opts
->
GetSubpixelBlendLimit
());
this
->
SetSubpixelContrastThreshold
(
opts
->
GetSubpixelContrastThreshold
());
this
->
SetEndpointSearchIterations
(
opts
->
GetEndpointSearchIterations
());
this
->
SetUseHighQualityEndpoints
(
opts
->
GetUseHighQualityEndpoints
());
this
->
SetDebugOptionValue
(
opts
->
GetDebugOptionValue
());
}
//------------------------------------------------------------------------------
void
vtkOpenGLFXAAFilter
::
SetUseHighQualityEndpoints
(
bool
val
)
{
...
...
@@ -90,7 +148,7 @@ void vtkOpenGLFXAAFilter::SetUseHighQualityEndpoints(bool val)
}
//------------------------------------------------------------------------------
void
vtkOpenGLFXAAFilter
::
SetDebugOptionValue
(
DebugOption
opt
)
void
vtkOpenGLFXAAFilter
::
SetDebugOptionValue
(
vtkFXAAOptions
::
DebugOption
opt
)
{
if
(
this
->
DebugOptionValue
!=
opt
)
{
...
...
@@ -116,6 +174,7 @@ vtkOpenGLFXAAFilter::vtkOpenGLFXAAFilter()
SubpixelContrastThreshold
(
1.
f
/
4.
f
),
EndpointSearchIterations
(
12
),
UseHighQualityEndpoints
(
true
),
DebugOptionValue
(
vtkFXAAOptions
::
FXAA_NO_DEBUG
),
NeedToRebuildShader
(
true
),
Renderer
(
NULL
),
Input
(
NULL
),
...
...
@@ -298,7 +357,7 @@ void vtkOpenGLFXAAFilter::SubstituteFragmentShader(std::string &fragShader)
}
#define DEBUG_OPT_CASE(optName) \
case optName: \
case
vtkFXAAOptions::
optName: \
vtkShaderProgram::Substitute(fragShader, "//VTK::DebugOptions::Def", \
"#define " #optName); \
break
...
...
@@ -307,7 +366,7 @@ void vtkOpenGLFXAAFilter::SubstituteFragmentShader(std::string &fragShader)
switch
(
this
->
DebugOptionValue
)
{
default:
case
FXAA_NO_DEBUG
:
case
vtkFXAAOptions
::
FXAA_NO_DEBUG
:
break
;
DEBUG_OPT_CASE
(
FXAA_DEBUG_SUBPIXEL_ALIASING
);
DEBUG_OPT_CASE
(
FXAA_DEBUG_EDGE_DIRECTION
);
...
...
Rendering/OpenGL2/vtkOpenGLFXAAFilter.h
View file @
c3f96385
...
...
@@ -39,7 +39,9 @@
#include "vtkRenderingOpenGL2Module.h" // For export macro
#include "vtkObject.h"
#include "vtkFXAAOptions.h" // For DebugOptions enum
class
vtkFXAAOptions
;
class
vtkOpenGLBufferObject
;
class
vtkOpenGLVertexArrayObject
;
class
vtkOpenGLRenderer
;
...
...
@@ -62,125 +64,29 @@ public:
void
ReleaseGraphicsResources
();
// Description:
// Threshold for applying FXAA to a pixel, relative to the maximum luminosity
// of its 4 immediate neighbors.
//
// The luminosity of the current pixel and it's NSWE neighbors is computed.
// The maximum luminosity and luminosity range (contrast) of all 5 pixels is
// found. If the contrast is less than RelativeContrastThreshold * maxLum,
// the pixel is not considered aliased and will not be affected by FXAA.
//
// Suggested settings:
// - 1/3: Too little
// - 1/4: Low quality
// - 1/8: High quality (default)
// - 1/16: Overkill
vtkSetClampMacro
(
RelativeContrastThreshold
,
float
,
0.
f
,
1.
f
)
vtkGetMacro
(
RelativeContrastThreshold
,
float
)
// Copy the configuration values from @a opts into this filter. Note that
// this copies the configuration values from opts -- it does not save the
// @a opts pointer.
void
UpdateConfiguration
(
vtkFXAAOptions
*
opts
);
// Description:
// Similar to RelativeContrastThreshold, but not scaled by the maximum
// luminosity.
//
// If the contrast of the current pixel and it's 4 immediate NSWE neighbors is
// less than HardContrastThreshold, the pixel is not considered aliased and
// will not be affected by FXAA.
//
// Suggested settings:
// - 1/32: Visible limit
// - 1/16: High quality (default)
// - 1/12: Upper limit (start of visible unfiltered edges)
// Parameter for tuning the FXAA implementation. See vtkFXAAOptions for
// details and suggested values.
vtkSetClampMacro
(
RelativeContrastThreshold
,
float
,
0.
f
,
1.
f
)
vtkGetMacro
(
RelativeContrastThreshold
,
float
)
vtkSetClampMacro
(
HardContrastThreshold
,
float
,
0.
f
,
1.
f
)
vtkGetMacro
(
HardContrastThreshold
,
float
)
// Description:
// Subpixel aliasing is corrected by applying a lowpass filter to the current
// pixel. This is implemented by blending an average of the 3x3 neighborhood
// around the pixel into the final result. The amount of blending is
// determined by comparing the detected amount of subpixel aliasing to the
// total contrasting of the CNSWE pixels:
//
// SubpixelBlending = abs(lumC - lumAveNSWE) / (lumMaxCNSWE - lumMinCNSWE)
//
// This parameter sets an upper limit to the amount of subpixel blending to
// prevent the image from simply getting blurred.
//
// Suggested settings:
// - 1/2: Low amount of blending.
// - 3/4: Medium amount of blending (default)
// - 7/8: High amount of blending.
// - 1: Maximum amount of blending.
vtkSetClampMacro
(
SubpixelBlendLimit
,
float
,
0.
f
,
1.
f
)
vtkGetMacro
(
SubpixelBlendLimit
,
float
)
// Description:
// Minimum amount of subpixel aliasing required for subpixel antialiasing to
// be applied.
//
// Subpixel aliasing is corrected by applying a lowpass filter to the current
// pixel. This is implemented by blending an average of the 3x3 neighborhood
// around the pixel into the final result. The amount of blending is
// determined by comparing the detected amount of subpixel aliasing to the
// total contrasting of the CNSWE pixels:
//
// SubpixelBlending = abs(lumC - lumAveNSWE) / (lumMaxCNSWE - lumMinCNSWE)
//
// If SubpixelBlending is less than this threshold, no lowpass blending will
// occur.
//
// Suggested settings:
// - 1/2: Low subpixel aliasing removal
// - 1/3: Medium subpixel aliasing removal
// - 1/4: Default subpixel aliasing removal
// - 1/8: High subpixel aliasing removal
// - 0: Complete subpixel aliasing removal
vtkSetClampMacro
(
SubpixelContrastThreshold
,
float
,
0.
f
,
1.
f
)
vtkGetMacro
(
SubpixelContrastThreshold
,
float
)
// Description:
// Use an improved edge endpoint detection algorithm.
//
// If true, a modified edge endpoint detection algorithm is used that requires
// more texture lookups, but will properly detect aliased single-pixel lines.
//
// If false, the edge endpoint algorithm proposed by NVIDIA will by used. This
// algorithm is faster (fewer lookups), but will fail to detect endpoints of
// single pixel edge steps.
//
// Default setting is true.
virtual
void
SetUseHighQualityEndpoints
(
bool
val
);
vtkGetMacro
(
UseHighQualityEndpoints
,
bool
)
vtkBooleanMacro
(
UseHighQualityEndpoints
,
bool
)
// Description:
// Set the number of iterations for the endpoint search algorithm. Increasing
// this value will increase runtime, but also properly detect longer edges.
// The current implementation steps one pixel in both the positive and
// negative directions per iteration. The default value is 12, which will
// resolve endpoints of edges < 25 pixels long (2 * 12 + 1).
vtkSetClampMacro
(
EndpointSearchIterations
,
int
,
0
,
VTK_INT_MAX
)
vtkGetMacro
(
EndpointSearchIterations
,
int
)
// Description:
// Debugging options that affect the output color buffer. See
// vtkFXAAFilterFS.glsl for details.
enum
DebugOption
{
FXAA_NO_DEBUG
=
0
,
FXAA_DEBUG_SUBPIXEL_ALIASING
,
FXAA_DEBUG_EDGE_DIRECTION
,
FXAA_DEBUG_EDGE_NUM_STEPS
,
FXAA_DEBUG_EDGE_DISTANCE
,
FXAA_DEBUG_EDGE_SAMPLE_OFFSET
,
FXAA_DEBUG_ONLY_SUBPIX_AA
,
FXAA_DEBUG_ONLY_EDGE_AA
};
// Description:
// Debugging options that affect the output color buffer. See
// vtkFXAAFilterFS.glsl for details. Only one may be active at a time.
virtual
void
S