1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2019 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SkottieMotionBlurEffect_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define SkottieMotionBlurEffect_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "modules/sksg/include/SkSGRenderNode.h" 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker namespace skottie { 14*c8dee2aaSAndroid Build Coastguard Worker namespace internal { 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker class Animator; 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker class MotionBlurEffect final : public sksg::CustomRenderNode { 19*c8dee2aaSAndroid Build Coastguard Worker public: 20*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<MotionBlurEffect> Make(sk_sp<Animator> animator, 21*c8dee2aaSAndroid Build Coastguard Worker sk_sp<sksg::RenderNode> child, 22*c8dee2aaSAndroid Build Coastguard Worker size_t samples_per_frame, 23*c8dee2aaSAndroid Build Coastguard Worker float shutter_angle, float shutter_phase); 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker SG_ATTRIBUTE(T, float, fT) 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker private: 28*c8dee2aaSAndroid Build Coastguard Worker class AutoInvalBlocker; 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker const RenderNode* onNodeAt(const SkPoint&) const override; 31*c8dee2aaSAndroid Build Coastguard Worker 32*c8dee2aaSAndroid Build Coastguard Worker SkRect onRevalidate(sksg::InvalidationController* ic, const SkMatrix& ctm) override; 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker void onRender(SkCanvas* canvas, const RenderContext* ctx) const override; 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Worker void renderToRaster8888Pow2Samples(SkCanvas* canvas, const RenderContext* ctx) const; 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard Worker SkRect seekToSample(size_t sample_idx, const SkMatrix& ctm) const; 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Worker MotionBlurEffect(sk_sp<Animator> animator, 41*c8dee2aaSAndroid Build Coastguard Worker sk_sp<sksg::RenderNode> child, 42*c8dee2aaSAndroid Build Coastguard Worker size_t sample_count, float phase, float dt); 43*c8dee2aaSAndroid Build Coastguard Worker 44*c8dee2aaSAndroid Build Coastguard Worker const sk_sp<Animator> fAnimator; 45*c8dee2aaSAndroid Build Coastguard Worker const size_t fSampleCount; 46*c8dee2aaSAndroid Build Coastguard Worker const float fPhase, 47*c8dee2aaSAndroid Build Coastguard Worker fDT; 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Worker float fT = 0; 50*c8dee2aaSAndroid Build Coastguard Worker size_t fVisibleSampleCount = 0; 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = sksg::CustomRenderNode; 53*c8dee2aaSAndroid Build Coastguard Worker }; 54*c8dee2aaSAndroid Build Coastguard Worker 55*c8dee2aaSAndroid Build Coastguard Worker } // namespace internal 56*c8dee2aaSAndroid Build Coastguard Worker } // namespace skottie 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker #endif // SkottieMotionBlurEffect_DEFINED 59