SeparableFilter
The SeparableFilter class implements a flexible GPU-based filtering system that applies separable convolution operations in horizontal and vertical directions using compute shaders. It allows customization of shader code for input and output stages, supports various filter types including Gaussian, Sobel, and box filters, and enables users to define or normalize custom weights. Filters can be configured with different border handling modes and dispatched efficiently on textures with optional slice and parameter control.
#include <graphics/TellusimSeparableFilter.h>
Constructors
SeparableFilter()
Methods
Clear filter.
void clear()
Check filter.
bool isCreated(Format format, uint32_t size) const
Input shader source.
void setInputSource(Mode mode, const char *src)
String getInputSource(Mode mode) const
Type | Name | Description |
---|---|---|
const char* | src | Shader source. |
Output shader source.
void setOutputSource(Mode mode, const char *src)
String getOutputSource(Mode mode) const
Type | Name | Description |
---|---|---|
const char* | src | Shader source. |
Create filter.
bool create(const Device &device, Format format, uint32_t size, Flags flags = DefaultFlags)
Type | Name | Description |
---|---|---|
Format | format | Texture format. |
uint32_t | size | Filter size in pixels, the actual filter size is (size * 2 + 1). |
Filter weights.
void setWeights(Mode mode, Array<Vector4f> weights, bool normalize = false)
void setWeights(Mode mode, Array<float32_t> weights, bool normalize = false)
Gaussian filter weights.
void setGaussianWeights(uint32_t size, Vector4f sigma)
void setGaussianWeights(uint32_t size, float32_t sigma)
Sobel filter weights.
void setSobelXWeights(uint32_t size)
void setSobelYWeights(uint32_t size)
Box filter weights.
void setBoxWeights(uint32_t size)
Dispatch separable filter.
bool dispatch(Compute &compute, Mode mode, uint32_t size, Texture &dest, Texture &src, Slice dest_slice, Slice src_slice, Vector4f values = Vector4f::zero) const
bool dispatch(Compute &compute, Mode mode, uint32_t size, Texture &dest, Texture &src, Slice src_slice, Vector4f values = Vector4f::zero) const
bool dispatch(Compute &compute, Mode mode, uint32_t size, Texture &dest, Texture &src, Vector4f values = Vector4f::zero) const
Type | Name | Description |
---|---|---|
Texture | dest | Destination texture. |
Texture | src | Source texture. |
Slice | dest_slice | Destination texture slice. |
Slice | src_slice | Source texture slice. |
Vector4f | values | Filter parameters available for the source blocks. |
Enums
Mode
Filter modes.
Name | Value | Description |
---|---|---|
ModeHorizontal | 0 | Horizontal filter. |
ModeVertical | 1 | Vertical filter. |
NumModes | 2 |
Flags
Filter flags.
Name | Value | Description |
---|---|---|
FlagNone | 0 | |
FlagRepeat | (1 << 0) | Repeat border. |
FlagZero | (1 << 1) | Zero border. |
DefaultFlags | FlagNone |