xref: /aosp_15_r20/external/skia/modules/skottie/src/effects/MotionBlurEffect.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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