1 /* 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 10 GrColorSpaceInfo::GrColorSpaceInfo(sk_sp<SkColorSpace> colorSpace, GrPixelConfig config) 11 : fColorSpace(std::move(colorSpace)) 12 , fConfig(config) 13 , fInitializedColorSpaceXformFromSRGB(false) {} 14 15 GrColorSpaceXform* 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(); 20 fColorXformFromSRGB = GrColorSpaceXform::MakeGamutXform(srgbColorSpace.get(), 21 fColorSpace.get()); 22 fInitializedColorSpaceXformFromSRGB = true; 23 } 24 // You can't be color-space aware in legacy mode 25 SkASSERT(fColorSpace || !fColorXformFromSRGB); 26 return fColorXformFromSRGB.get(); 27 } 28