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
22class SkColorSpace;
23class SkReadBuffer;
24class SkWriteBuffer;
25struct SkIPoint;
26struct SkStageRec;
27
28using UniformsCallback = SkRuntimeEffectPriv::UniformsCallback;
29
30class SkRuntimeShader : public SkShaderBase {
31public:
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 bool isOpaque() const override { return fEffect->alwaysOpaque(); }
45
46 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 SkRuntimeEffect* asRuntimeEffect() const override { return fEffect.get(); }
53
54 sk_sp<SkRuntimeEffect> effect() const { return fEffect; }
55 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
61private:
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
74

source code of flutter_engine/third_party/skia/src/shaders/SkRuntimeShader.h