Coverage Report

Created: 2024-09-14 07:19

/src/skia/src/shaders/SkRuntimeShader.h
Line
Count
Source
1
/*
2
 * Copyright 2023 Google LLC
3
 *
4
 * Use of this source code is governed by a BSD-style license that can be
5
 * found in the LICENSE file.
6
 */
7
#ifndef SkRuntimeShader_DEFINED
8
#define SkRuntimeShader_DEFINED
9
10
#include "include/core/SkData.h"
11
#include "include/core/SkFlattenable.h"
12
#include "include/core/SkRefCnt.h"
13
#include "include/core/SkSpan.h"
14
#include "include/effects/SkRuntimeEffect.h"
15
#include "include/private/base/SkDebug.h"
16
#include "src/core/SkRuntimeEffectPriv.h"
17
#include "src/shaders/SkShaderBase.h"
18
#include "src/sksl/tracing/SkSLDebugTracePriv.h"
19
20
#include <vector>
21
22
class SkColorSpace;
23
class SkReadBuffer;
24
class SkWriteBuffer;
25
struct SkIPoint;
26
struct SkStageRec;
27
28
using UniformsCallback = SkRuntimeEffectPriv::UniformsCallback;
29
30
class SkRuntimeShader : public SkShaderBase {
31
public:
32
    SkRuntimeShader(sk_sp<SkRuntimeEffect> effect,
33
                    sk_sp<SkSL::DebugTracePriv> debugTrace,
34
                    sk_sp<const SkData> uniforms,
35
                    SkSpan<const SkRuntimeEffect::ChildPtr> children);
36
37
    SkRuntimeShader(sk_sp<SkRuntimeEffect> effect,
38
                    sk_sp<SkSL::DebugTracePriv> debugTrace,
39
                    UniformsCallback uniformsCallback,
40
                    SkSpan<const SkRuntimeEffect::ChildPtr> children);
41
42
    SkRuntimeEffect::TracedShader makeTracedClone(const SkIPoint& coord);
43
44
13.0k
    bool isOpaque() const override { return fEffect->alwaysOpaque(); }
45
46
15.4k
    ShaderType type() const override { return ShaderType::kRuntime; }
47
48
    bool appendStages(const SkStageRec& rec, const SkShaders::MatrixRec& mRec) const override;
49
50
    void flatten(SkWriteBuffer& buffer) const override;
51
52
30.8k
    SkRuntimeEffect* asRuntimeEffect() const override { return fEffect.get(); }
53
54
15.4k
    sk_sp<SkRuntimeEffect> effect() const { return fEffect; }
55
15.4k
    SkSpan<const SkRuntimeEffect::ChildPtr> children() const { return fChildren; }
56
57
    sk_sp<const SkData> uniformData(const SkColorSpace* dstCS) const;
58
59
    SK_FLATTENABLE_HOOKS(SkRuntimeShader)
60
61
private:
62
    enum Flags {
63
        kHasLegacyLocalMatrix_Flag = 1 << 1,
64
    };
65
66
    sk_sp<SkRuntimeEffect> fEffect;
67
    sk_sp<SkSL::DebugTracePriv> fDebugTrace;
68
    sk_sp<const SkData> fUniformData;
69
    UniformsCallback fUniformsCallback;
70
    std::vector<SkRuntimeEffect::ChildPtr> fChildren;
71
};
72
73
#endif