Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
third_party
skia
src
shaders
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
8
#include "
src/shaders/SkColorFilterShader.h
"
9
10
#include "
include/core/SkColorFilter.h
"
11
#include "
include/core/SkShader.h
"
12
#include "
include/private/base/SkAssert.h
"
13
#include "
src/base/SkArenaAlloc.h
"
14
#include "
src/core/SkEffectPriv.h
"
15
#include "
src/core/SkRasterPipeline.h
"
16
#include "
src/core/SkRasterPipelineOpList.h
"
17
#include "
src/core/SkReadBuffer.h
"
18
#include "
src/core/SkWriteBuffer.h
"
19
#include "
src/effects/colorfilters/SkColorFilterBase.h
"
20
21
#include <utility>
22
23
SkColorFilterShader::SkColorFilterShader
(
sk_sp<SkShader>
shader,
24
float
alpha,
25
sk_sp<SkColorFilter>
filter)
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
34
sk_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
43
bool
SkColorFilterShader::isOpaque
()
const
{
44
return
fShader->
isOpaque
() && fAlpha == 1.0f &&
as_CFB
(fFilter)->
isAlphaUnchanged
();
45
}
46
47
void
SkColorFilterShader::flatten
(
SkWriteBuffer
&
buffer
)
const
{
48
buffer
.writeFlattenable(fShader.
get
());
49
SkASSERT
(fAlpha == 1.0f);
// Not exposed in public API SkShader::makeWithColorFilter().
50
buffer
.writeFlattenable(fFilter.
get
());
51
}
52
53
bool
SkColorFilterShader::appendStages
(
const
SkStageRec
& rec,
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
}
SkArenaAlloc.h
SkAssert.h
SkASSERT
#define SkASSERT(cond)
Definition
SkAssert.h:116
SkColorFilterBase.h
as_CFB_sp
static sk_sp< SkColorFilterBase > as_CFB_sp(sk_sp< SkColorFilter > filter)
Definition
SkColorFilterBase.h:102
as_CFB
static SkColorFilterBase * as_CFB(SkColorFilter *filter)
Definition
SkColorFilterBase.h:90
SkColorFilterShader.h
SkColorFilter.h
SkEffectPriv.h
SkRasterPipelineOpList.h
SkRasterPipeline.h
SkReadBuffer.h
as_SB
SkShaderBase * as_SB(SkShader *shader)
Definition
SkShaderBase.h:412
SkShader.h
SkWriteBuffer.h
SkArenaAlloc::make
auto make(Ctor &&ctor) -> decltype(ctor(nullptr))
Definition
SkArenaAlloc.h:120
SkColorFilterBase::appendStages
virtual bool appendStages(const SkStageRec &rec, bool shaderIsOpaque) const =0
SkColorFilterShader::isOpaque
bool isOpaque() const override
Definition
SkColorFilterShader.cpp:43
SkColorFilterShader::filter
sk_sp< SkColorFilterBase > filter() const
Definition
SkColorFilterShader.h:29
SkColorFilterShader::shader
sk_sp< SkShader > shader() const
Definition
SkColorFilterShader.h:28
SkColorFilterShader::flatten
void flatten(SkWriteBuffer &) const override
Definition
SkColorFilterShader.cpp:47
SkColorFilterShader::SkColorFilterShader
SkColorFilterShader(sk_sp< SkShader > shader, float alpha, sk_sp< SkColorFilter > filter)
Definition
SkColorFilterShader.cpp:23
SkColorFilterShader::appendStages
bool appendStages(const SkStageRec &, const SkShaders::MatrixRec &) const override
Definition
SkColorFilterShader.cpp:53
SkColorFilter::isAlphaUnchanged
bool isAlphaUnchanged() const
Definition
SkColorFilter.cpp:34
SkRasterPipeline::append
void append(SkRasterPipelineOp, void *=nullptr)
Definition
SkRasterPipeline.cpp:44
SkReadBuffer
Definition
SkReadBuffer.h:52
SkShader::isOpaque
virtual bool isOpaque() const
Definition
SkShader.h:44
SkShaders::MatrixRec
Definition
SkShaderBase.h:57
SkWriteBuffer
Definition
SkWriteBuffer.h:41
sk_sp
Definition
SkRefCnt.h:220
sk_sp::get
T * get() const
Definition
SkRefCnt.h:303
buffer
static const uint8_t buffer[]
Definition
fl_pixel_buffer_texture_test.cc:44
std
Definition
ref_ptr.h:256
SkStageRec
Definition
SkEffectPriv.h:20
SkStageRec::fPipeline
SkRasterPipeline * fPipeline
Definition
SkEffectPriv.h:21
SkStageRec::fAlloc
SkArenaAlloc * fAlloc
Definition
SkEffectPriv.h:22
Generated on Fri Apr 26 2024 06:17:28 for Flutter Engine by
1.9.8