Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
third_party
skia
src
shaders
SkBitmapProcShader.cpp
Go to the documentation of this file.
1
/*
2
* Copyright 2011 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/SkBitmapProcShader.h
"
9
10
#include "
include/core/SkColor.h
"
11
#include "
include/core/SkMatrix.h
"
12
#include "
include/core/SkPixmap.h
"
13
#include "
include/private/base/SkAssert.h
"
14
#include "
src/base/SkArenaAlloc.h
"
15
#include "
src/core/SkBitmapProcState.h
"
16
17
#include <algorithm>
18
#include <cstdint>
19
20
enum class
SkTileMode
;
21
22
class
BitmapProcShaderContext
:
public
SkShaderBase::Context
{
23
public
:
24
BitmapProcShaderContext
(
const
SkShaderBase
& shader,
const
SkShaderBase::ContextRec
& rec,
25
SkBitmapProcState
*
state
)
26
:
INHERITED
(shader, rec)
27
, fState(
state
)
28
, fFlags(0)
29
{
30
if
(fState->
fPixmap
.
isOpaque
() && (255 == this->getPaintAlpha())) {
31
fFlags |=
SkShaderBase::kOpaqueAlpha_Flag
;
32
}
33
}
34
35
uint32_t
getFlags
()
const override
{
return
fFlags; }
36
37
void
shadeSpan
(
int
x
,
int
y
,
SkPMColor
dstC[],
int
count
)
override
{
38
const
SkBitmapProcState
&
state
= *fState;
39
if
(
state
.getShaderProc32()) {
40
state
.
getShaderProc32
()(&
state
,
x
,
y
, dstC,
count
);
41
return
;
42
}
43
44
const
int
BUF_MAX = 128;
45
uint32_t
buffer
[BUF_MAX];
46
SkBitmapProcState::MatrixProc
mproc =
state
.getMatrixProc();
47
SkBitmapProcState::SampleProc32
sproc =
state
.getSampleProc32();
48
const
int
max
=
state
.maxCountForBufferSize(
sizeof
(
buffer
[0]) * BUF_MAX);
49
50
SkASSERT
(
state
.fPixmap.addr());
51
52
for
(;;) {
53
int
n = std::min(
count
,
max
);
54
SkASSERT
(n > 0 && n < BUF_MAX*2);
55
mproc(
state
,
buffer
, n,
x
,
y
);
56
sproc(
state
,
buffer
, n, dstC);
57
58
if
((
count
-= n) == 0) {
59
break
;
60
}
61
SkASSERT
(
count
> 0);
62
x
+= n;
63
dstC += n;
64
}
65
}
66
67
private
:
68
SkBitmapProcState
* fState;
69
uint32_t fFlags;
70
71
using
INHERITED =
SkShaderBase::Context
;
72
};
73
74
///////////////////////////////////////////////////////////////////////////////////////////////////
75
76
SkShaderBase::Context
* SkBitmapProcLegacyShader::MakeContext(
77
const
SkShaderBase
& shader,
SkTileMode
tmx
,
SkTileMode
tmy
,
const
SkSamplingOptions
& sampling,
78
const
SkImage_Base
*
image
,
const
ContextRec& rec,
SkArenaAlloc
* alloc)
79
{
80
SkMatrix
totalInverse;
81
// Do this first, so we know the matrix can be inverted.
82
if
(!rec.fMatrixRec.totalInverse(&totalInverse)) {
83
return
nullptr
;
84
}
85
86
SkBitmapProcState
*
state
= alloc->
make
<
SkBitmapProcState
>(
image
,
tmx
,
tmy
);
87
if
(!
state
->setup(totalInverse, rec.fPaintAlpha, sampling)) {
88
return
nullptr
;
89
}
90
return
alloc->
make
<
BitmapProcShaderContext
>(shader, rec,
state
);
91
}
count
int count
Definition
FontMgrTest.cpp:50
SkArenaAlloc.h
SkAssert.h
SkASSERT
#define SkASSERT(cond)
Definition
SkAssert.h:116
SkBitmapProcShader.h
SkBitmapProcState.h
SkColor.h
SkPMColor
uint32_t SkPMColor
Definition
SkColor.h:205
SkMatrix.h
SkPixmap.h
SkTileMode
SkTileMode
Definition
SkTileMode.h:13
BitmapProcShaderContext
Definition
SkBitmapProcShader.cpp:22
BitmapProcShaderContext::getFlags
uint32_t getFlags() const override
Definition
SkBitmapProcShader.cpp:35
BitmapProcShaderContext::shadeSpan
void shadeSpan(int x, int y, SkPMColor dstC[], int count) override
Definition
SkBitmapProcShader.cpp:37
BitmapProcShaderContext::BitmapProcShaderContext
BitmapProcShaderContext(const SkShaderBase &shader, const SkShaderBase::ContextRec &rec, SkBitmapProcState *state)
Definition
SkBitmapProcShader.cpp:24
SkArenaAlloc
Definition
SkArenaAlloc.h:105
SkArenaAlloc::make
auto make(Ctor &&ctor) -> decltype(ctor(nullptr))
Definition
SkArenaAlloc.h:120
SkImage_Base
Definition
SkImage_Base.h:38
SkMatrix
Definition
SkMatrix.h:54
SkPixmap::isOpaque
bool isOpaque() const
Definition
SkPixmap.h:201
SkShaderBase::Context
Definition
SkShaderBase.h:297
SkShaderBase
Definition
SkShaderBase.h:186
SkShaderBase::kOpaqueAlpha_Flag
@ kOpaqueAlpha_Flag
set if all of the colors will be opaque
Definition
SkShaderBase.h:262
image
sk_sp< SkImage > image
Definition
examples.cpp:29
state
AtkStateType state
Definition
fl_accessible_node.cc:10
buffer
static const uint8_t buffer[]
Definition
fl_pixel_buffer_texture_test.cc:44
max
static float max(float r, float g, float b)
Definition
hsl.cpp:49
y
double y
Definition
mouse-input-test.cc:83
x
double x
Definition
mouse-input-test.cc:82
tmy
SkTileMode tmy
Definition
pictureshader.cpp:31
tmx
SkTileMode tmx
Definition
pictureshader.cpp:30
SkBitmapProcState
Definition
SkBitmapProcState.h:35
SkBitmapProcState::getShaderProc32
ShaderProc32 getShaderProc32() const
Definition
SkBitmapProcState.h:86
SkBitmapProcState::MatrixProc
void(* MatrixProc)(const SkBitmapProcState &, uint32_t bitmapXY[], int count, int x, int y)
Definition
SkBitmapProcState.h:45
SkBitmapProcState::SampleProc32
void(* SampleProc32)(const SkBitmapProcState &, const uint32_t[], int count, SkPMColor colors[])
Definition
SkBitmapProcState.h:50
SkBitmapProcState::fPixmap
SkPixmap fPixmap
Definition
SkBitmapProcState.h:57
SkSamplingOptions
Definition
SkSamplingOptions.h:58
SkShaderBase::ContextRec
Definition
SkShaderBase.h:268
Generated on Fri Apr 26 2024 06:17:28 for Flutter Engine by
1.9.8