blob: 9edb487ee8de85869aa0b9bf6560bf4a528a2a4f [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"
Mike Kleine03a1762018-08-22 11:52:16 -04009#include "SkColorSpacePriv.h"
Brian Salomonf3569f02017-10-24 12:52:33 -040010
11GrColorSpaceInfo::GrColorSpaceInfo(sk_sp<SkColorSpace> colorSpace, GrPixelConfig config)
12 : fColorSpace(std::move(colorSpace))
13 , fConfig(config)
14 , fInitializedColorSpaceXformFromSRGB(false) {}
15
16GrColorSpaceXform* GrColorSpaceInfo::colorSpaceXformFromSRGB() const {
17 // TODO: Make this atomic if we start accessing this on multiple threads.
18 if (!fInitializedColorSpaceXformFromSRGB) {
Brian Osman08a50e02018-06-15 15:06:48 -040019 // sRGB sources are very common (SkColor, etc...), so we cache that transformation
Mike Kleine03a1762018-08-22 11:52:16 -040020 fColorXformFromSRGB = GrColorSpaceXform::Make(sk_srgb_singleton(), kUnpremul_SkAlphaType,
21 fColorSpace.get(), kUnpremul_SkAlphaType);
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}