Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
SkColorSpaceXformColorFilter.cpp
Go to the documentation of this file.
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
9
12#include "include/core/SkData.h"
23
24#include <cstdint>
25#include <utility>
26
29 : fSrc(std::move(src))
30 , fDst(std::move(dst))
31 , fSteps( // We handle premul/unpremul separately, so here just always upm->upm.
32 fSrc.get(),
34 fDst.get(),
36
37bool SkColorSpaceXformColorFilter::appendStages(const SkStageRec& rec, bool shaderIsOpaque) const {
38 if (!shaderIsOpaque) {
39 rec.fPipeline->append(SkRasterPipelineOp::unpremul);
40 }
41
42 fSteps.apply(rec.fPipeline);
43
44 if (!shaderIsOpaque) {
45 rec.fPipeline->append(SkRasterPipelineOp::premul);
46 }
47 return true;
48}
49
51 buffer.writeDataAsByteArray(fSrc->serialize().get());
52 buffer.writeDataAsByteArray(fDst->serialize().get());
53}
54
55sk_sp<SkFlattenable> SkColorSpaceXformColorFilter::LegacyGammaOnlyCreateProc(SkReadBuffer& buffer) {
56 uint32_t dir = buffer.read32();
57 if (!buffer.validate(dir <= 1)) {
58 return nullptr;
59 }
60 if (dir == 0) {
62 }
64}
65
66sk_sp<SkFlattenable> SkColorSpaceXformColorFilter::CreateProc(SkReadBuffer& buffer) {
67 sk_sp<SkColorSpace> colorSpaces[2];
68 for (int i = 0; i < 2; ++i) {
69 auto data = buffer.readByteArrayAsData();
70 if (!buffer.validate(data != nullptr)) {
71 return nullptr;
72 }
73 colorSpaces[i] = SkColorSpace::Deserialize(data->data(), data->size());
74 if (!buffer.validate(colorSpaces[i] != nullptr)) {
75 return nullptr;
76 }
77 }
79 new SkColorSpaceXformColorFilter(std::move(colorSpaces[0]), std::move(colorSpaces[1])));
80}
81
87
93
96 return sk_make_sp<SkColorSpaceXformColorFilter>(std::move(src), std::move(dst));
97}
98
101 // Previous name
102 SkFlattenable::Register("ColorSpaceXformColorFilter", SkColorSpaceXformColorFilter::CreateProc);
103 // TODO(ccameron): Remove after grace period for SKPs to stop using old serialization.
104 SkFlattenable::Register("SkSRGBGammaColorFilter",
105 SkColorSpaceXformColorFilter::LegacyGammaOnlyCreateProc);
106}
kUnpremul_SkAlphaType
void SkRegisterSkColorSpaceXformColorFilterFlattenable()
#define SK_REGISTER_FLATTENABLE(type)
sk_sp< T > sk_ref_sp(T *obj)
Definition SkRefCnt.h:381
static sk_sp< SkColorFilter > MakeColorSpaceXform(sk_sp< SkColorSpace > src, sk_sp< SkColorSpace > dst)
static sk_sp< SkColorFilter > SRGBToLinearGamma()
static sk_sp< SkColorFilter > LinearToSRGBGamma()
void flatten(SkWriteBuffer &buffer) const override
bool appendStages(const SkStageRec &rec, bool shaderIsOpaque) const override
SkColorSpaceXformColorFilter(sk_sp< SkColorSpace > src, sk_sp< SkColorSpace > dst)
static sk_sp< SkColorSpace > MakeSRGB()
static sk_sp< SkColorSpace > Deserialize(const void *data, size_t length)
sk_sp< SkData > serialize() const
static sk_sp< SkColorSpace > MakeSRGBLinear()
static void Register(const char name[], Factory)
const T * get() const
void append(SkRasterPipelineOp, void *=nullptr)
T * get() const
Definition SkRefCnt.h:303
static const uint8_t buffer[]
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot data
Definition switches.h:41
Definition ref_ptr.h:256
void apply(float rgba[4]) const
SkRasterPipeline * fPipeline