sk_sp<SkColorSpace> SkColorSpace::NewNamed(Named named) { static SkOnce sRGBOnce; static SkColorSpace* sRGB; static SkOnce adobeRGBOnce; static SkColorSpace* adobeRGB; switch (named) { case kSRGB_Named: { sRGBOnce([] { SkMatrix44 srgbToxyzD50(SkMatrix44::kUninitialized_Constructor); srgbToxyzD50.set3x3RowMajorf(gSRGB_toXYZD50); sRGB = new SkColorSpace_Base(kSRGB_GammaNamed, srgbToxyzD50, kSRGB_Named); }); return sk_ref_sp(sRGB); } case kAdobeRGB_Named: { adobeRGBOnce([] { SkMatrix44 adobergbToxyzD50(SkMatrix44::kUninitialized_Constructor); adobergbToxyzD50.set3x3RowMajorf(gAdobeRGB_toXYZD50); adobeRGB = new SkColorSpace_Base(k2Dot2Curve_GammaNamed, adobergbToxyzD50, kAdobeRGB_Named); }); return sk_ref_sp(adobeRGB); } default: break; } return nullptr; }
sk_sp<SkColorSpace> SkColorSpace::NewNamed(Named named) { static SkOnce sRGBOnce; static SkColorSpace* sRGB; static SkOnce adobeRGBOnce; static SkColorSpace* adobeRGB; switch (named) { case kSRGB_Named: { gStandardGammasOnce([] { gStandardGammas = new SkGammas(2.2f, 2.2f, 2.2f); }); sRGBOnce([] { SkMatrix44 srgbToxyzD50(SkMatrix44::kUninitialized_Constructor); srgbToxyzD50.set3x3ColMajorf(gSRGB_toXYZD50); sRGB = new SkColorSpace(sk_ref_sp(gStandardGammas), srgbToxyzD50, kSRGB_Named); }); return sk_ref_sp(sRGB); } case kAdobeRGB_Named: { gStandardGammasOnce([] { gStandardGammas = new SkGammas(2.2f, 2.2f, 2.2f); }); adobeRGBOnce([] { SkMatrix44 adobergbToxyzD50(SkMatrix44::kUninitialized_Constructor); adobergbToxyzD50.set3x3ColMajorf(gAdobeRGB_toXYZD50); adobeRGB = new SkColorSpace(sk_ref_sp(gStandardGammas), adobergbToxyzD50, kAdobeRGB_Named); }); return sk_ref_sp(adobeRGB); } default: break; } return nullptr; }