aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkColorSpace_XYZ.h
blob: a179c1a5016e55789e567df5a88cd6ac0955fd65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*
 * Copyright 2016 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SkColorSpace_XYZ_DEFINED
#define SkColorSpace_XYZ_DEFINED

#include "SkColorSpace_Base.h"
#include "SkData.h"
#include "SkOnce.h"

class SkColorSpace_XYZ : public SkColorSpace_Base {
public:
    const SkMatrix44* toXYZD50() const override { return &fToXYZD50; }
    uint32_t toXYZD50Hash() const override { return fToXYZD50Hash; }

    const SkMatrix44* fromXYZD50() const override;

    bool onGammaCloseToSRGB() const override;
    
    bool onGammaIsLinear() const override;
    
    Type type() const override { return Type::kXYZ; }
    
    sk_sp<SkColorSpace> makeLinearGamma() override;
    sk_sp<SkColorSpace> makeSRGBGamma() override;
    
    SkGammaNamed gammaNamed() const { return fGammaNamed; }
    
    const SkGammas* gammas() const { return fGammas.get(); }
    
    void toDstGammaTables(const uint8_t* tables[3], sk_sp<SkData>* storage, int numTables) const;

private:
    SkColorSpace_XYZ(SkGammaNamed gammaNamed, const SkMatrix44& toXYZ);

    SkColorSpace_XYZ(SkGammaNamed gammaNamed, sk_sp<SkGammas> gammas,
                     const SkMatrix44& toXYZ, sk_sp<SkData> profileData);

    const SkGammaNamed     fGammaNamed;
    sk_sp<SkGammas>        fGammas;
    const SkMatrix44       fToXYZD50;
    uint32_t               fToXYZD50Hash;
    
    mutable SkMatrix44     fFromXYZD50;
    mutable SkOnce         fFromXYZOnce;
    
    mutable sk_sp<SkData>  fDstStorage;
    mutable const uint8_t* fToDstGammaTables[3];
    mutable SkOnce         fToDstGammaOnce;

    friend class SkColorSpace;
    friend class SkColorSpace_Base;
    friend class ColorSpaceXformTest;
    typedef SkColorSpace_Base INHERITED;
};

#endif