blob: 20264aa3e5d5fdc6e0599d779306e41794a5bbb7 [file] [log] [blame]
Brian Osman10b6ad12017-07-25 09:59:24 -04001/*
2 * Copyright 2017 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#ifndef SkToSRGBColorFilter_DEFINED
9#define SkToSRGBColorFilter_DEFINED
10
Cary Clark4dc5a452018-05-21 11:56:57 -040011#include "SkFlattenable.h"
Brian Osman10b6ad12017-07-25 09:59:24 -040012#include "SkColorFilter.h"
13#include "SkRefCnt.h"
14
15class SkColorSpace;
16class SkRasterPipeline;
17
18/**
19 * Color filter that converts from supplied color space to sRGB (both gamut and transfer function).
20 */
21class SK_API SkToSRGBColorFilter : public SkColorFilter {
22public:
23 static sk_sp<SkColorFilter> Make(sk_sp<SkColorSpace> srcColorSpace);
24
25#if SK_SUPPORT_GPU
Brian Salomon4cbb6e62017-10-25 15:12:19 -040026 std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(
27 GrContext*, const GrColorSpaceInfo&) const override;
Brian Osman10b6ad12017-07-25 09:59:24 -040028#endif
29
Cary Clark4dc5a452018-05-21 11:56:57 -040030 Factory getFactory() const override { return CreateProc; }
Brian Osman10b6ad12017-07-25 09:59:24 -040031
32private:
33 void flatten(SkWriteBuffer&) const override;
34 SkToSRGBColorFilter(sk_sp<SkColorSpace>);
35 void onAppendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*,
36 bool shaderIsOpaque) const override;
Cary Clark4dc5a452018-05-21 11:56:57 -040037 static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&);
38 friend class SkFlattenable::PrivateInitializer;
Brian Osman10b6ad12017-07-25 09:59:24 -040039
40 sk_sp<SkColorSpace> fSrcColorSpace;
41
42 typedef SkColorFilter INHERITED;
43};
44
45#endif