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

Private Member Functions

SkString getName () const override
 
SkISize getISize () override
 
void onOnceBeforeDraw () override
 
bool onAnimate (double nanos) override
 
void onDraw (SkCanvas *canvas) override
 

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
 
- 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
 
- Static Public Attributes inherited from skiagm::GM
static constexpr char kErrorMsg_DrawSkippedGpuOnly []
 
- Protected Member Functions inherited from skiagm::GM
virtual DrawResult onGpuSetup (SkCanvas *, SkString *, GraphiteTestContext *)
 
virtual void onGpuTeardown ()
 
virtual DrawResult onDraw (SkCanvas *, SkString *errorMsg)
 
virtual bool onGetControls (SkMetaData *)
 
virtual void onSetControls (const SkMetaData &)
 
GraphiteTestContextgraphiteTestContext () const
 

Detailed Description

Definition at line 180 of file arithmode.cpp.

Member Function Documentation

◆ getISize()

SkISize ArithmodeBlenderGM::getISize ( )
inlineoverrideprivatevirtual

Implements skiagm::GM.

Definition at line 191 of file arithmode.cpp.

191{ return {(W + 30) * 2, (H + 30) * 4}; }
Definition SkMD5.cpp:130

◆ getName()

SkString ArithmodeBlenderGM::getName ( ) const
inlineoverrideprivatevirtual

Implements skiagm::GM.

Definition at line 186 of file arithmode.cpp.

186{ return SkString("arithmode_blender"); }

◆ onAnimate()

bool ArithmodeBlenderGM::onAnimate ( double  nanos)
inlineoverrideprivatevirtual

Reimplemented from skiagm::GM.

Definition at line 221 of file arithmode.cpp.

221 {
222 double theta = nanos * 1e-6 * 0.001;
223 fK1 = sin(theta + 0) * 0.25;
224 fK2 = cos(theta + 1) * 0.25;
225 fK3 = sin(theta + 2) * 0.25;
226 fK4 = 0.5;
227 return true;
228 }

◆ onDraw()

void ArithmodeBlenderGM::onDraw ( SkCanvas canvas)
inlineoverrideprivatevirtual

Reimplemented from skiagm::GM.

Definition at line 230 of file arithmode.cpp.

230 {
231 const SkRect rect = SkRect::MakeWH(W, H);
232
233 canvas->drawImage(fSrc, 10, 10);
234 canvas->drawImage(fDst, 10, 10 + H + 10);
235
237 sk_sp<SkBlender> blender = SkBlenders::Arithmetic(fK1, fK2, fK3, fK4,
238 /*enforcePremul=*/true);
239 canvas->translate(10 + W + 10, 10);
240
241 // All three images drawn below should appear identical.
242 // Draw via blend step
243 SkPaint blenderPaint;
244 canvas->drawImage(fChecker, 0, 0);
245 canvas->saveLayer(&rect, nullptr);
246 canvas->drawImage(fDst, 0, 0);
247 blenderPaint.setBlender(blender);
248 canvas->drawImage(fSrc, 0, 0, sampling, &blenderPaint);
249 canvas->restore();
250
251 canvas->translate(0, 10 + H);
252
253 // Draw via SkImageFilters::Blend (should appear the same as above)
254 SkPaint imageFilterPaint;
255 canvas->drawImage(fChecker, 0, 0);
256 imageFilterPaint.setImageFilter(
257 SkImageFilters::Blend(blender,
258 /*background=*/nullptr,
259 /*foreground=*/SkImageFilters::Image(fSrc, sampling)));
260 canvas->drawImage(fDst, 0, 0, sampling, &imageFilterPaint);
261
262 canvas->translate(0, 10 + H);
263
264 // Draw via SkShaders::Blend (should still appear the same as above)
265 SkPaint shaderBlendPaint;
266 canvas->drawImage(fChecker, 0, 0);
267 shaderBlendPaint.setShader(SkShaders::Blend(blender, fDstShader, fSrcShader));
268 canvas->drawRect(rect, shaderBlendPaint);
269
270 canvas->translate(0, 10 + H);
271
272 // Draw via runtime effect (should still appear the same as above)
273 SkPaint runtimePaint;
274 canvas->drawImage(fChecker, 0, 0);
275 SkRuntimeEffect::ChildPtr children[] = {fSrcShader, fDstShader, blender};
276 runtimePaint.setShader(fRuntimeEffect->makeShader(/*uniforms=*/{}, children));
277 canvas->drawRect(rect, runtimePaint);
278 }
static sk_sp< SkBlender > Arithmetic(float k1, float k2, float k3, float k4, bool enforcePremul)
int saveLayer(const SkRect *bounds, const SkPaint *paint)
Definition SkCanvas.cpp:500
void drawRect(const SkRect &rect, const SkPaint &paint)
void restore()
Definition SkCanvas.cpp:465
void translate(SkScalar dx, SkScalar dy)
void drawImage(const SkImage *image, SkScalar left, SkScalar top)
Definition SkCanvas.h:1528
static sk_sp< SkImageFilter > Image(sk_sp< SkImage > image, const SkRect &srcRect, const SkRect &dstRect, const SkSamplingOptions &sampling)
static sk_sp< SkImageFilter > Blend(SkBlendMode mode, sk_sp< SkImageFilter > background, sk_sp< SkImageFilter > foreground=nullptr, const CropRect &cropRect={})
void setImageFilter(sk_sp< SkImageFilter > imageFilter)
void setShader(sk_sp< SkShader > shader)
void setBlender(sk_sp< SkBlender > blender)
Definition SkPaint.cpp:155
sk_sp< SkShader > makeShader(sk_sp< const SkData > uniforms, sk_sp< SkShader > children[], size_t childCount, const SkMatrix *localMatrix=nullptr) const
sk_sp< SkBlender > blender SkRect rect
Definition SkRecords.h:350
SkSamplingOptions sampling
Definition SkRecords.h:337
static constexpr SkRect MakeWH(float w, float h)
Definition SkRect.h:609

◆ onOnceBeforeDraw()

void ArithmodeBlenderGM::onOnceBeforeDraw ( )
inlineoverrideprivatevirtual

Reimplemented from skiagm::GM.

Definition at line 193 of file arithmode.cpp.

193 {
194 // Prepare a runtime effect for this blend.
195 static constexpr char kShader[] = R"(
196 uniform shader srcImage;
197 uniform shader dstImage;
198 uniform blender arithBlend;
199 half4 main(float2 xy) {
200 return arithBlend.eval(srcImage.eval(xy), dstImage.eval(xy));
201 }
202 )";
203 auto [effect, error] = SkRuntimeEffect::MakeForShader(SkString(kShader));
204 SkASSERT(effect);
205 fRuntimeEffect = effect;
206
207 // Start with interesting K-values, in case we're drawn without calling onAnimate().
208 fK1 = -0.25f;
209 fK2 = 0.25f;
210 fK3 = 0.25f;
211 fK4 = 0;
212
213 fSrc = make_src(W, H);
214 fDst = make_dst(W, H);
217
218 fChecker = ToolUtils::create_checkerboard_image(W, H, 0xFFBBBBBB, 0xFFEEEEEE, 8);
219 }
#define SkASSERT(cond)
Definition SkAssert.h:116
static sk_sp< SkImage > make_src(int w, int h)
Definition arithmode.cpp:35
static sk_sp< SkImage > make_dst(int w, int h)
Definition arithmode.cpp:51
sk_sp< SkShader > makeShader(SkTileMode tmx, SkTileMode tmy, const SkSamplingOptions &, const SkMatrix *localMatrix=nullptr) const
Definition SkImage.cpp:179
static Result MakeForShader(SkString sksl, const Options &)
const uint8_t uint32_t uint32_t GError ** error
sk_sp< SkImage > create_checkerboard_image(int w, int h, SkColor c1, SkColor c2, int checkSize)

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