diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/SkBlitter_Sprite.cpp | 3 | ||||
-rw-r--r-- | src/core/SkColorSpace.cpp | 14 | ||||
-rw-r--r-- | src/core/SkColorSpacePriv.h | 6 | ||||
-rw-r--r-- | src/core/SkColorSpaceXformer.cpp | 3 | ||||
-rw-r--r-- | src/core/SkPM4fPriv.h | 5 | ||||
-rw-r--r-- | src/core/SkRasterPipelineBlitter.cpp | 3 |
6 files changed, 22 insertions, 12 deletions
diff --git a/src/core/SkBlitter_Sprite.cpp b/src/core/SkBlitter_Sprite.cpp index b26b712d93..e0998d9608 100644 --- a/src/core/SkBlitter_Sprite.cpp +++ b/src/core/SkBlitter_Sprite.cpp @@ -7,6 +7,7 @@ #include "SkArenaAlloc.h" #include "SkColorSpace.h" +#include "SkColorSpacePriv.h" #include "SkColorSpaceXformSteps.h" #include "SkCoreBlitters.h" #include "SkOpts.h" @@ -143,7 +144,7 @@ public: if (!srcCS || fSource.colorType() == kAlpha_8_SkColorType) { // We treat untagged images as sRGB. // A8 images get their r,g,b from the paint color, so they're also sRGB. - srcCS = SkColorSpace::MakeSRGB().get(); + srcCS = sk_srgb_singleton(); } fAlloc->make<SkColorSpaceXformSteps>(srcCS, kPremul_SkAlphaType, dstCS) ->apply(&p); diff --git a/src/core/SkColorSpace.cpp b/src/core/SkColorSpace.cpp index 3b08e29a89..239f98aac8 100644 --- a/src/core/SkColorSpace.cpp +++ b/src/core/SkColorSpace.cpp @@ -192,21 +192,21 @@ static SkColorSpace* singleton_colorspace(SkGammaNamed gamma, const float to_xyz return new SkColorSpace_XYZ(gamma, m44); } -static SkColorSpace* srgb() { +SkColorSpace* sk_srgb_singleton() { static SkColorSpace* cs = singleton_colorspace(kSRGB_SkGammaNamed, gSRGB_toXYZD50); return cs; } -static SkColorSpace* srgb_linear() { +SkColorSpace* sk_srgb_linear_singleton() { static SkColorSpace* cs = singleton_colorspace(kLinear_SkGammaNamed, gSRGB_toXYZD50); return cs; } sk_sp<SkColorSpace> SkColorSpace::MakeSRGB() { - return sk_ref_sp(srgb()); + return sk_ref_sp(sk_srgb_singleton()); } sk_sp<SkColorSpace> SkColorSpace::MakeSRGBLinear() { - return sk_ref_sp(srgb_linear()); + return sk_ref_sp(sk_srgb_linear_singleton()); } /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -258,7 +258,7 @@ uint32_t SkColorSpace::toXYZD50Hash() const { } bool SkColorSpace::isSRGB() const { - return srgb() == this; + return sk_srgb_singleton() == this; } /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -331,13 +331,13 @@ size_t SkColorSpace::writeToMemory(void* memory) const { SkASSERT(this->toXYZD50()); // If we have a named profile, only write the enum. const SkGammaNamed gammaNamed = this->gammaNamed(); - if (this == srgb()) { + if (this == sk_srgb_singleton()) { if (memory) { *((ColorSpaceHeader*) memory) = ColorSpaceHeader::Pack( k0_Version, kSRGB_NamedColorSpace, gammaNamed, 0); } return sizeof(ColorSpaceHeader); - } else if (this == srgb_linear()) { + } else if (this == sk_srgb_linear_singleton()) { if (memory) { *((ColorSpaceHeader*) memory) = ColorSpaceHeader::Pack( k0_Version, kSRGBLinear_NamedColorSpace, gammaNamed, 0); diff --git a/src/core/SkColorSpacePriv.h b/src/core/SkColorSpacePriv.h index 7742a8770a..278a6a47d2 100644 --- a/src/core/SkColorSpacePriv.h +++ b/src/core/SkColorSpacePriv.h @@ -216,4 +216,10 @@ static inline bool named_to_parametric(SkColorSpaceTransferFn* coeffs, return false; } } + +// Return raw pointers to commonly used SkColorSpaces. +// No need to ref/unref these, but if you do, do it in pairs. +SkColorSpace* sk_srgb_singleton(); +SkColorSpace* sk_srgb_linear_singleton(); + #endif // SkColorSpacePriv_DEFINED diff --git a/src/core/SkColorSpaceXformer.cpp b/src/core/SkColorSpaceXformer.cpp index 5329294982..1e56d4da93 100644 --- a/src/core/SkColorSpaceXformer.cpp +++ b/src/core/SkColorSpaceXformer.cpp @@ -6,6 +6,7 @@ */ #include "SkColorFilter.h" +#include "SkColorSpacePriv.h" #include "SkColorSpaceXformer.h" #include "SkColorSpaceXformPriv.h" #include "SkDrawLooper.h" @@ -26,7 +27,7 @@ SkColorSpaceXformer::~SkColorSpaceXformer() {} std::unique_ptr<SkColorSpaceXformer> SkColorSpaceXformer::Make(sk_sp<SkColorSpace> dst) { std::unique_ptr<SkColorSpaceXform> fromSRGB = SkMakeColorSpaceXform( - SkColorSpace::MakeSRGB().get(), dst.get()); + sk_srgb_singleton(), dst.get()); return fromSRGB ? std::unique_ptr<SkColorSpaceXformer>(new SkColorSpaceXformer(std::move(dst), diff --git a/src/core/SkPM4fPriv.h b/src/core/SkPM4fPriv.h index f5e9aa02e6..f7daabf7dc 100644 --- a/src/core/SkPM4fPriv.h +++ b/src/core/SkPM4fPriv.h @@ -10,6 +10,7 @@ #include "SkColorData.h" #include "SkColorSpace.h" +#include "SkColorSpacePriv.h" #include "SkColorSpaceXformSteps.h" #include "SkArenaAlloc.h" #include "SkPM4f.h" @@ -40,7 +41,7 @@ static inline uint32_t Sk4f_toL32(const Sk4f& px) { static inline SkPM4f premul_in_dst_colorspace(SkColor4f color4f, SkColorSpace* srcCS, SkColorSpace* dstCS) { // We treat untagged sources as sRGB. - if (!srcCS) { srcCS = SkColorSpace::MakeSRGB().get(); } + if (!srcCS) { srcCS = sk_srgb_singleton(); } // If dstCS is null, no color space transformation is needed (and apply() will just premul). if (!dstCS) { dstCS = srcCS; } @@ -58,7 +59,7 @@ static inline SkPM4f premul_in_dst_colorspace(SkColor c, SkColorSpace* dstCS) { swizzle_rb(Sk4f_fromL32(c)).store(color4f.vec()); // SkColors are always sRGB. - return premul_in_dst_colorspace(color4f, SkColorSpace::MakeSRGB().get(), dstCS); + return premul_in_dst_colorspace(color4f, sk_srgb_singleton(), dstCS); } // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/src/core/SkRasterPipelineBlitter.cpp b/src/core/SkRasterPipelineBlitter.cpp index ab6990ad1a..58497e07c6 100644 --- a/src/core/SkRasterPipelineBlitter.cpp +++ b/src/core/SkRasterPipelineBlitter.cpp @@ -11,6 +11,7 @@ #include "SkBlitter.h" #include "SkColor.h" #include "SkColorFilter.h" +#include "SkColorSpacePriv.h" #include "SkColorSpaceXformer.h" #include "SkColorSpaceXformSteps.h" #include "SkOpts.h" @@ -94,7 +95,7 @@ SkBlitter* SkCreateRasterPipelineBlitter(const SkPixmap& dst, // we need to sometimes still need to distinguish null dstCS from sRGB. #if 0 SkColorSpace* dstCS = dst.colorSpace() ? dst.colorSpace() - : SkColorSpace::MakeSRGB().get(); + : sk_srgb_singleton(); #else SkColorSpace* dstCS = dst.colorSpace(); #endif |