xref: /aosp_15_r20/external/skia/tools/fiddle/examples.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker // Copyright 2019 Google LLC.
2*c8dee2aaSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
3*c8dee2aaSAndroid Build Coastguard Worker #ifndef examples_DEFINED
4*c8dee2aaSAndroid Build Coastguard Worker #define examples_DEFINED
5*c8dee2aaSAndroid Build Coastguard Worker 
6*c8dee2aaSAndroid Build Coastguard Worker #include "tools/Registry.h"
7*c8dee2aaSAndroid Build Coastguard Worker #include "skia.h"
8*c8dee2aaSAndroid Build Coastguard Worker 
9*c8dee2aaSAndroid Build Coastguard Worker #include <cinttypes>
10*c8dee2aaSAndroid Build Coastguard Worker #include <cmath>
11*c8dee2aaSAndroid Build Coastguard Worker #include <string>
12*c8dee2aaSAndroid Build Coastguard Worker 
13*c8dee2aaSAndroid Build Coastguard Worker namespace fiddle {
14*c8dee2aaSAndroid Build Coastguard Worker struct Example {
15*c8dee2aaSAndroid Build Coastguard Worker     void (*fFunc)(SkCanvas*);
16*c8dee2aaSAndroid Build Coastguard Worker     const char* fName;
17*c8dee2aaSAndroid Build Coastguard Worker     double fAnimationDuration;
18*c8dee2aaSAndroid Build Coastguard Worker     int fImageIndex;
19*c8dee2aaSAndroid Build Coastguard Worker     int fWidth;
20*c8dee2aaSAndroid Build Coastguard Worker     int fHeight;
21*c8dee2aaSAndroid Build Coastguard Worker     int fOffscreenWidth;
22*c8dee2aaSAndroid Build Coastguard Worker     int fOffscreenHeight;
23*c8dee2aaSAndroid Build Coastguard Worker     int fOffscreenSampleCount;
24*c8dee2aaSAndroid Build Coastguard Worker     bool fText;
25*c8dee2aaSAndroid Build Coastguard Worker     bool fSRGB;
26*c8dee2aaSAndroid Build Coastguard Worker     bool fF16;
27*c8dee2aaSAndroid Build Coastguard Worker     bool fOffscreen;
28*c8dee2aaSAndroid Build Coastguard Worker     bool fOffscreenTexturable;
29*c8dee2aaSAndroid Build Coastguard Worker     bool fOffscreenMipMap;
30*c8dee2aaSAndroid Build Coastguard Worker };
31*c8dee2aaSAndroid Build Coastguard Worker }
32*c8dee2aaSAndroid Build Coastguard Worker 
33*c8dee2aaSAndroid Build Coastguard Worker extern GrBackendTexture backEndTexture;
34*c8dee2aaSAndroid Build Coastguard Worker extern GrBackendRenderTarget backEndRenderTarget;
35*c8dee2aaSAndroid Build Coastguard Worker extern GrBackendTexture backEndTextureRenderTarget;
36*c8dee2aaSAndroid Build Coastguard Worker extern SkBitmap source;
37*c8dee2aaSAndroid Build Coastguard Worker extern sk_sp<SkImage> image;
38*c8dee2aaSAndroid Build Coastguard Worker extern double duration; // The total duration of the animation in seconds.
39*c8dee2aaSAndroid Build Coastguard Worker extern double frame;    // A value in [0, 1] of where we are in the animation.
40*c8dee2aaSAndroid Build Coastguard Worker extern sk_sp<SkFontMgr> fontMgr;  // Can load some system fonts
41*c8dee2aaSAndroid Build Coastguard Worker 
42*c8dee2aaSAndroid Build Coastguard Worker #define REGISTER_FIDDLE(NAME, WIDTH, HEIGHT, TEXT, IMG_INDEX, DURATION, SRGB, F16,   \
43*c8dee2aaSAndroid Build Coastguard Worker                         OFSCR, OFSCR_WIDTH, OFSCR_HEIGHT, OFSCR_SAMPLECOUNT,         \
44*c8dee2aaSAndroid Build Coastguard Worker                         OFSCR_TEXTURABLE, OFSCR_MIPMAP)                              \
45*c8dee2aaSAndroid Build Coastguard Worker     namespace example_##NAME { void draw(SkCanvas*);  }                              \
46*c8dee2aaSAndroid Build Coastguard Worker     sk_tools::Registry<fiddle::Example> reg_##NAME(                                  \
47*c8dee2aaSAndroid Build Coastguard Worker         fiddle::Example{&example_##NAME::draw, #NAME, DURATION, IMG_INDEX,           \
48*c8dee2aaSAndroid Build Coastguard Worker                         WIDTH, HEIGHT, OFSCR_WIDTH, OFSCR_HEIGHT, OFSCR_SAMPLECOUNT, \
49*c8dee2aaSAndroid Build Coastguard Worker                         TEXT, SRGB, F16, OFSCR, OFSCR_TEXTURABLE, OFSCR_MIPMAP});    \
50*c8dee2aaSAndroid Build Coastguard Worker     namespace example_##NAME
51*c8dee2aaSAndroid Build Coastguard Worker 
52*c8dee2aaSAndroid Build Coastguard Worker #define REG_FIDDLE_SRGB(NAME, W, H, T, I, DURATION, F16)   \
53*c8dee2aaSAndroid Build Coastguard Worker     REGISTER_FIDDLE(NAME, W, H, T, I, DURATION, true, F16, \
54*c8dee2aaSAndroid Build Coastguard Worker                     false, 64, 64, 0, false, false)
55*c8dee2aaSAndroid Build Coastguard Worker 
56*c8dee2aaSAndroid Build Coastguard Worker #define REG_FIDDLE_ANIMATED(NAME, W, H, T, I, DURATION)       \
57*c8dee2aaSAndroid Build Coastguard Worker     REGISTER_FIDDLE(NAME, W, H, T, I, DURATION, false, false, \
58*c8dee2aaSAndroid Build Coastguard Worker                     false, 64, 64, 0, false, false)
59*c8dee2aaSAndroid Build Coastguard Worker 
60*c8dee2aaSAndroid Build Coastguard Worker #define REG_FIDDLE(NAME, W, H, TEXT, I)         \
61*c8dee2aaSAndroid Build Coastguard Worker     REG_FIDDLE_ANIMATED(NAME, W, H, TEXT, I, 0)
62*c8dee2aaSAndroid Build Coastguard Worker 
63*c8dee2aaSAndroid Build Coastguard Worker #endif  // examples_DEFINED
64