Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | List of all members
skiagm::MatrixConvolutionGM Class Reference
Inheritance diagram for skiagm::MatrixConvolutionGM:
skiagm::GM

Public Member Functions

 MatrixConvolutionGM (SkColor colorOne, SkColor colorTwo, KernelFixture kernelFixture, const char *nameSuffix)
 
- Public Member Functions inherited from skiagm::GM
 GM (SkColor backgroundColor=SK_ColorWHITE)
 
virtual ~GM ()
 
void setMode (Mode mode)
 
Mode getMode () const
 
DrawResult gpuSetup (SkCanvas *, SkString *errorMsg, GraphiteTestContext *=nullptr)
 
void gpuTeardown ()
 
void onceBeforeDraw ()
 
DrawResult draw (SkCanvas *canvas)
 
DrawResult draw (SkCanvas *, SkString *errorMsg)
 
void drawBackground (SkCanvas *)
 
DrawResult drawContent (SkCanvas *canvas)
 
DrawResult drawContent (SkCanvas *, SkString *errorMsg)
 
virtual bool runAsBench () const
 
SkScalar width ()
 
SkScalar height ()
 
SkColor getBGColor () const
 
void setBGColor (SkColor)
 
void drawSizeBounds (SkCanvas *, SkColor)
 
bool animate (double)
 
virtual bool onChar (SkUnichar)
 
bool getControls (SkMetaData *controls)
 
void setControls (const SkMetaData &controls)
 
virtual void modifyGrContextOptions (GrContextOptions *)
 
virtual void modifyGraphiteContextOptions (skgpu::graphite::ContextOptions *) const
 
virtual bool isBazelOnly () const
 
virtual std::map< std::string, std::string > getGoldKeys () const
 

Protected Member Functions

SkString getName () const override
 
void makeBitmap ()
 
SkISize getISize () override
 
sk_sp< SkImageFiltermakeFilter (const SkIPoint &kernelOffset, SkTileMode tileMode, bool convolveAlpha)
 
void draw (SkCanvas *canvas, int x, int y, const SkIPoint &kernelOffset, SkTileMode tileMode, bool convolveAlpha, const SkIRect *cropRect=nullptr)
 
void onOnceBeforeDraw () override
 
void onDraw (SkCanvas *canvas) override
 
- Protected Member Functions inherited from skiagm::GM
virtual DrawResult onGpuSetup (SkCanvas *, SkString *, GraphiteTestContext *)
 
virtual void onGpuTeardown ()
 
virtual DrawResult onDraw (SkCanvas *, SkString *errorMsg)
 
virtual bool onAnimate (double)
 
virtual bool onGetControls (SkMetaData *)
 
virtual void onSetControls (const SkMetaData &)
 
GraphiteTestContextgraphiteTestContext () const
 

Additional Inherited Members

- Public Types inherited from skiagm::GM
enum  Mode { kGM_Mode , kSample_Mode , kBench_Mode }
 
using DrawResult = skiagm::DrawResult
 
using GraphiteTestContext = skiatest::graphite::GraphiteTestContext
 
- Static Public Attributes inherited from skiagm::GM
static constexpr char kErrorMsg_DrawSkippedGpuOnly []
 

Detailed Description

Definition at line 38 of file matrixconvolution.cpp.

Constructor & Destructor Documentation

◆ MatrixConvolutionGM()

skiagm::MatrixConvolutionGM::MatrixConvolutionGM ( SkColor  colorOne,
SkColor  colorTwo,
KernelFixture  kernelFixture,
const char *  nameSuffix 
)
inline

Definition at line 40 of file matrixconvolution.cpp.

41 : fNameSuffix(nameSuffix),
42 fKernelFixture(kernelFixture) {
43 this->setBGColor(0x00000000);
44 fColors[0] = colorOne;
45 fColors[1] = colorTwo;
46 }
void setBGColor(SkColor)
Definition gm.cpp:159

Member Function Documentation

◆ draw()

void skiagm::MatrixConvolutionGM::draw ( SkCanvas canvas,
int  x,
int  y,
const SkIPoint kernelOffset,
SkTileMode  tileMode,
bool  convolveAlpha,
const SkIRect cropRect = nullptr 
)
inlineprotected

Definition at line 97 of file matrixconvolution.cpp.

99 {
101 auto filter = this->makeFilter(kernelOffset, tileMode, convolveAlpha);
102 if (cropRect) {
103 filter = SkImageFilters::Crop(SkRect::Make(*cropRect), std::move(filter));
104 }
105 paint.setImageFilter(std::move(filter));
106 canvas->save();
108 canvas->drawImage(fImage, 0, 0, {}, &paint);
109 canvas->restore();
110 }
#define SkIntToScalar(x)
Definition SkScalar.h:57
void restore()
Definition SkCanvas.cpp:465
void translate(SkScalar dx, SkScalar dy)
int save()
Definition SkCanvas.cpp:451
void drawImage(const SkImage *image, SkScalar left, SkScalar top)
Definition SkCanvas.h:1528
static sk_sp< SkImageFilter > Crop(const SkRect &rect, SkTileMode tileMode, sk_sp< SkImageFilter > input)
sk_sp< SkImageFilter > makeFilter(const SkIPoint &kernelOffset, SkTileMode tileMode, bool convolveAlpha)
const Paint & paint
double y
double x
static SkRect Make(const SkISize &size)
Definition SkRect.h:669

◆ getISize()

SkISize skiagm::MatrixConvolutionGM::getISize ( )
inlineoverrideprotectedvirtual

Implements skiagm::GM.

Definition at line 66 of file matrixconvolution.cpp.

66{ return SkISize::Make(500, 300); }
static constexpr SkISize Make(int32_t w, int32_t h)
Definition SkSize.h:20

◆ getName()

SkString skiagm::MatrixConvolutionGM::getName ( ) const
inlineoverrideprotectedvirtual

Implements skiagm::GM.

Definition at line 49 of file matrixconvolution.cpp.

49{ return SkStringPrintf("matrixconvolution%s", fNameSuffix); }
SK_API SkString static SkString SkStringPrintf()
Definition SkString.h:287

◆ makeBitmap()

void skiagm::MatrixConvolutionGM::makeBitmap ( )
inlineprotected

Definition at line 51 of file matrixconvolution.cpp.

51 {
52 // Draw our bitmap in N32, so legacy devices get "premul" values they understand
55 paint.setColor(0xFFFFFFFF);
56 SkPoint pts[2] = { {0, 0},
57 {0, 80.0f} };
58 SkScalar pos[2] = { 0, 80.0f };
60 pts, fColors, pos, 2, SkTileMode::kClamp));
62 surf->getCanvas()->drawString("e", -10.0f, 80.0f, font, paint);
63 fImage = surf->makeImageSnapshot();
64 }
SkPoint pos
static sk_sp< SkShader > MakeLinear(const SkPoint pts[2], const SkColor colors[], const SkScalar pos[], int count, SkTileMode mode, uint32_t flags=0, const SkMatrix *localMatrix=nullptr)
float SkScalar
Definition extension.cpp:12
SK_API sk_sp< SkSurface > Raster(const SkImageInfo &imageInfo, size_t rowBytes, const SkSurfaceProps *surfaceProps)
sk_sp< SkTypeface > DefaultPortableTypeface()
font
Font Metadata and Metrics.
static SkImageInfo MakeN32Premul(int width, int height)

◆ makeFilter()

sk_sp< SkImageFilter > skiagm::MatrixConvolutionGM::makeFilter ( const SkIPoint kernelOffset,
SkTileMode  tileMode,
bool  convolveAlpha 
)
inlineprotected

Definition at line 68 of file matrixconvolution.cpp.

70 {
71 // Must provide a cropping geometry in order for 'tileMode' to be well defined.
72 SkIRect tileBoundary = fImage->bounds();
73 switch (fKernelFixture) {
75 // All 1s except center value, which is -7 (sum of 1).
76 std::vector<SkScalar> kernel(9, SkIntToScalar(1));
77 kernel[4] = SkIntToScalar(-7);
79 {3,3}, kernel.data(), /* gain */ 0.3f, /* bias */ SkIntToScalar(100),
80 kernelOffset, tileMode, convolveAlpha, nullptr, tileBoundary);
81 }
83 // This ensures the texture fallback path will be taken
84 static_assert(49 > skgpu::kMaxBlurSamples);
85 // All 1s except center value, which is -47 (sum of 1).
86 std::vector<SkScalar> kernel(49, SkIntToScalar(1));
87 kernel[24] = SkIntToScalar(-47);
89 {7,7}, kernel.data(), /* gain */ 0.3f, /* bias */ SkIntToScalar(100),
90 kernelOffset, tileMode, convolveAlpha, nullptr, tileBoundary);
91 }
92 default:
93 return nullptr;
94 }
95 }
static sk_sp< SkImageFilter > MatrixConvolution(const SkISize &kernelSize, const SkScalar kernel[], SkScalar gain, SkScalar bias, const SkIPoint &kernelOffset, SkTileMode tileMode, bool convolveAlpha, sk_sp< SkImageFilter > input, const CropRect &cropRect={})
SkIRect bounds() const
Definition SkImage.h:303
static constexpr int kMaxBlurSamples
Definition BlurUtils.h:52

◆ onDraw()

void skiagm::MatrixConvolutionGM::onDraw ( SkCanvas canvas)
inlineoverrideprotectedvirtual

Reimplemented from skiagm::GM.

Definition at line 116 of file matrixconvolution.cpp.

116 {
117 canvas->clear(SK_ColorBLACK);
118 SkIPoint kernelOffset = SkIPoint::Make(1, 0);
119 for (int x = 10; x < 310; x += 100) {
120 this->draw(canvas, x, 10, kernelOffset, SkTileMode::kClamp, true);
121 this->draw(canvas, x, 110, kernelOffset, SkTileMode::kDecal, true);
122 this->draw(canvas, x, 210, kernelOffset, SkTileMode::kRepeat, true);
123 kernelOffset.fY++;
124 }
125 kernelOffset.fY = 1;
126 SkIRect smallRect = SkIRect::MakeXYWH(10, 5, 60, 60);
127 this->draw(canvas, 310, 10, kernelOffset, SkTileMode::kClamp, true, &smallRect);
128 this->draw(canvas, 310, 110, kernelOffset, SkTileMode::kDecal, true, &smallRect);
129 this->draw(canvas, 310, 210, kernelOffset, SkTileMode::kRepeat, true, &smallRect);
130
131 this->draw(canvas, 410, 10, kernelOffset, SkTileMode::kClamp, false);
132 this->draw(canvas, 410, 110, kernelOffset, SkTileMode::kDecal, false);
133 this->draw(canvas, 410, 210, kernelOffset, SkTileMode::kRepeat, false);
134 }
constexpr SkColor SK_ColorBLACK
Definition SkColor.h:103
void clear(SkColor color)
Definition SkCanvas.h:1199
void draw(SkCanvas *canvas, int x, int y, const SkIPoint &kernelOffset, SkTileMode tileMode, bool convolveAlpha, const SkIRect *cropRect=nullptr)
int32_t fY
y-axis value
static constexpr SkIPoint Make(int32_t x, int32_t y)
static constexpr SkIRect MakeXYWH(int32_t x, int32_t y, int32_t w, int32_t h)
Definition SkRect.h:104

◆ onOnceBeforeDraw()

void skiagm::MatrixConvolutionGM::onOnceBeforeDraw ( )
inlineoverrideprotectedvirtual

Reimplemented from skiagm::GM.

Definition at line 112 of file matrixconvolution.cpp.

112 {
113 this->makeBitmap();
114 }

The documentation for this class was generated from the following file: