blob: 1a49e8622d3cb7e047d9d3cad815d66e2d8727ef [file] [log] [blame]
Brian Salomonf3569f02017-10-24 12:52:33 -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#include "GrColorSpaceInfo.h"
9
10GrColorSpaceInfo::GrColorSpaceInfo(sk_sp<SkColorSpace> colorSpace, GrPixelConfig config)
11 : fColorSpace(std::move(colorSpace))
12 , fConfig(config)
13 , fInitializedColorSpaceXformFromSRGB(false) {}
14
15GrColorSpaceXform* GrColorSpaceInfo::colorSpaceXformFromSRGB() const {
16 // TODO: Make this atomic if we start accessing this on multiple threads.
17 if (!fInitializedColorSpaceXformFromSRGB) {
18 // sRGB sources are very common (SkColor, etc...), so we cache that gamut transformation
19 auto srgbColorSpace = SkColorSpace::MakeSRGB();
Brian Osmanf06ead92017-10-30 13:47:41 -040020 fColorXformFromSRGB = GrColorSpaceXform::MakeGamutXform(srgbColorSpace.get(),
21 fColorSpace.get());
Brian Salomonf3569f02017-10-24 12:52:33 -040022 fInitializedColorSpaceXformFromSRGB = true;
23 }
Brian Salomon4cbb6e62017-10-25 15:12:19 -040024 // You can't be color-space aware in legacy mode
25 SkASSERT(fColorSpace || !fColorXformFromSRGB);
Brian Salomonf3569f02017-10-24 12:52:33 -040026 return fColorXformFromSRGB.get();
27}