Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
SkLocalMatrixShader.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2014 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
8
11
12class SkImage;
13enum class SkTileMode;
14struct SkStageRec;
15
17 return as_SB(fWrappedShader)->isConstant();
18}
19
28
29sk_sp<SkFlattenable> SkLocalMatrixShader::CreateProc(SkReadBuffer& buffer) {
30 SkMatrix lm;
31 buffer.readMatrix(&lm);
32 auto baseShader(buffer.readShader());
33 if (!baseShader) {
34 return nullptr;
35 }
36 return baseShader->makeWithLocalMatrix(lm);
37}
38
40 buffer.writeMatrix(fLocalMatrix);
41 buffer.writeFlattenable(fWrappedShader.get());
42}
43
44#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
45SkShaderBase::Context* SkLocalMatrixShader::onMakeContext(const ContextRec& rec,
46 SkArenaAlloc* alloc) const {
47 return as_SB(fWrappedShader)->makeContext(ContextRec::Concat(rec, fLocalMatrix), alloc);
48}
49#endif
50
52 SkMatrix imageMatrix;
53 SkImage* image = fWrappedShader->isAImage(&imageMatrix, mode);
54 if (image && outMatrix) {
55 *outMatrix = ConcatLocalMatrices(fLocalMatrix, imageMatrix);
56 }
57
58 return image;
59}
60
62 const SkShaders::MatrixRec& mRec) const {
63 return as_SB(fWrappedShader)->appendStages(rec, mRec.concat(fLocalMatrix));
64}
65
66////////////////////////////////////////////////////////////////////
67
69 : fProxyShader(std::move(proxy)), fCTM(ctm) {}
70
72 return as_SB(fProxyShader)->isConstant();
73}
74
76 SkMatrix* localMatrix) const {
77 return as_SB(fProxyShader)->asGradient(info, localMatrix);
78}
79
81 return as_SB(fProxyShader)->appendRootStages(rec, fCTM);
82}
83
84sk_sp<SkFlattenable> SkCTMShader::CreateProc(SkReadBuffer& buffer) {
85 SkASSERT(false);
86 return nullptr;
87}
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
Definition DM.cpp:213
#define SkASSERT(cond)
Definition SkAssert.h:116
SkShaderBase * as_SB(SkShader *shader)
SkTileMode
Definition SkTileMode.h:13
SkCTMShader(sk_sp< SkShader > proxy, const SkMatrix &ctm)
bool appendStages(const SkStageRec &rec, const SkShaders::MatrixRec &) const override
bool isConstant() const override
GradientType asGradient(GradientInfo *info, SkMatrix *localMatrix) const override
bool isConstant() const override
const SkMatrix & localMatrix() const
bool appendStages(const SkStageRec &, const SkShaders::MatrixRec &) const override
SkImage * onIsAImage(SkMatrix *matrix, SkTileMode *mode) const override
void flatten(SkWriteBuffer &) const override
GradientType asGradient(GradientInfo *info, SkMatrix *localMatrix) const override
ShaderType type() const override
virtual GradientType asGradient(GradientInfo *info=nullptr, SkMatrix *localMatrix=nullptr) const
virtual bool isConstant() const
bool appendRootStages(const SkStageRec &rec, const SkMatrix &ctm) const
static SkMatrix ConcatLocalMatrices(const SkMatrix &parentLM, const SkMatrix &childLM)
Context * makeContext(const ContextRec &, SkArenaAlloc *) const
virtual bool appendStages(const SkStageRec &, const SkShaders::MatrixRec &) const =0
SkImage * isAImage(SkMatrix *localMatrix, SkTileMode xy[2]) const
Definition SkShader.cpp:22
MatrixRec concat(const SkMatrix &m) const
T * get() const
Definition SkRefCnt.h:303
sk_sp< SkImage > image
Definition examples.cpp:29
static const uint8_t buffer[]
Definition ref_ptr.h:256