Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
SkColorFilterShader.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2013 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 */
7
9
20
21#include <utility>
22
24 float alpha,
26 : fShader(std::move(shader))
27 , fFilter(as_CFB_sp(std::move(filter)))
28 , fAlpha (alpha)
29{
30 SkASSERT(fShader);
31 SkASSERT(fFilter);
32}
33
34sk_sp<SkFlattenable> SkColorFilterShader::CreateProc(SkReadBuffer& buffer) {
35 auto shader = buffer.readShader();
36 auto filter = buffer.readColorFilter();
37 if (!shader || !filter) {
38 return nullptr;
39 }
40 return sk_make_sp<SkColorFilterShader>(shader, 1.0f, filter);
41}
42
44 return fShader->isOpaque() && fAlpha == 1.0f && as_CFB(fFilter)->isAlphaUnchanged();
45}
46
48 buffer.writeFlattenable(fShader.get());
49 SkASSERT(fAlpha == 1.0f); // Not exposed in public API SkShader::makeWithColorFilter().
50 buffer.writeFlattenable(fFilter.get());
51}
52
54 const SkShaders::MatrixRec& mRec) const {
55 if (!as_SB(fShader)->appendStages(rec, mRec)) {
56 return false;
57 }
58 if (fAlpha != 1.0f) {
59 rec.fPipeline->append(SkRasterPipelineOp::scale_1_float, rec.fAlloc->make<float>(fAlpha));
60 }
61 if (!fFilter->appendStages(rec, fAlpha == 1.0f && fShader->isOpaque())) {
62 return false;
63 }
64 return true;
65}
#define SkASSERT(cond)
Definition SkAssert.h:116
static sk_sp< SkColorFilterBase > as_CFB_sp(sk_sp< SkColorFilter > filter)
static SkColorFilterBase * as_CFB(SkColorFilter *filter)
SkShaderBase * as_SB(SkShader *shader)
auto make(Ctor &&ctor) -> decltype(ctor(nullptr))
virtual bool appendStages(const SkStageRec &rec, bool shaderIsOpaque) const =0
bool isOpaque() const override
sk_sp< SkColorFilterBase > filter() const
sk_sp< SkShader > shader() const
void flatten(SkWriteBuffer &) const override
SkColorFilterShader(sk_sp< SkShader > shader, float alpha, sk_sp< SkColorFilter > filter)
bool appendStages(const SkStageRec &, const SkShaders::MatrixRec &) const override
bool isAlphaUnchanged() const
void append(SkRasterPipelineOp, void *=nullptr)
virtual bool isOpaque() const
Definition SkShader.h:44
T * get() const
Definition SkRefCnt.h:303
static const uint8_t buffer[]
Definition ref_ptr.h:256
SkRasterPipeline * fPipeline
SkArenaAlloc * fAlloc