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