Plasma Engine  2.0
Loading...
Searching...
No Matches
ImageFilter.h
1#pragma once
2
3#include <Foundation/Containers/HybridArray.h>
4#include <Foundation/SimdMath/SimdFloat.h>
5#include <Texture/TextureDLL.h>
6
8class PL_TEXTURE_DLL plImageFilter
9{
10public:
12 virtual plSimdFloat SamplePoint(const plSimdFloat& x) const = 0;
13
15 plSimdFloat GetWidth() const;
16
17protected:
18 plImageFilter(float width);
19
20private:
21 plSimdFloat m_fWidth;
22};
23
25class PL_TEXTURE_DLL plImageFilterBox : public plImageFilter
26{
27public:
28 plImageFilterBox(float fWidth = 0.5f);
29
30 virtual plSimdFloat SamplePoint(const plSimdFloat& x) const override;
31};
32
34class PL_TEXTURE_DLL plImageFilterTriangle : public plImageFilter
35{
36public:
37 plImageFilterTriangle(float fWidth = 1.0f);
38
39 virtual plSimdFloat SamplePoint(const plSimdFloat& x) const override;
40};
41
44{
45public:
49 plImageFilterSincWithKaiserWindow(float fWindowWidth = 3.0f, float fBeta = 4.0f);
50
51 virtual plSimdFloat SamplePoint(const plSimdFloat& x) const override;
52
53private:
54 plSimdFloat m_fBeta;
55 plSimdFloat m_fInvBesselBeta;
56};
57
59class PL_TEXTURE_DLL plImageFilterWeights
60{
61public:
63 plImageFilterWeights(const plImageFilter& filter, plUInt32 uiSrcSamples, plUInt32 uiDstSamples);
64
66 plUInt32 GetNumWeights() const;
67
69 plSimdFloat GetWeight(plUInt32 uiDstSampleIndex, plUInt32 uiWeightIndex) const;
70
72 inline plInt32 GetFirstSourceSampleIndex(plUInt32 uiDstSampleIndex) const;
73
74 plArrayPtr<const float> ViewWeights() const;
75
76private:
78 plSimdFloat m_fWidthInSourceSpace;
79 plSimdFloat m_fSourceToDestScale;
80 plSimdFloat m_fDestToSourceScale;
81 plUInt32 m_uiNumWeights;
82 plUInt32 m_uiDstSamplesReduced;
83};
84
85#include <Texture/Image/Implementation/ImageFilter_inl.h>
This class encapsulates an array and it's size. It is recommended to use this class instead of plain ...
Definition ArrayPtr.h:37
A hybrid array uses in-place storage to handle the first few elements without any allocation....
Definition HybridArray.h:12
Box filter.
Definition ImageFilter.h:26
Represents a function used for filtering an image.
Definition ImageFilter.h:9
virtual plSimdFloat SamplePoint(const plSimdFloat &x) const =0
Samples the filter function at a single point. Note that the distribution isn't necessarily normalize...
Kaiser-windowed sinc filter.
Definition ImageFilter.h:44
Triangle filter.
Definition ImageFilter.h:35
Pre-computes the required filter weights for rescaling a sequence of image samples.
Definition ImageFilter.h:60
Definition SimdFloat.h:7