diff options
-rw-r--r-- | bench/ColorCodecBench.cpp | 3 | ||||
-rw-r--r-- | bench/nanobench.cpp | 3 | ||||
-rw-r--r-- | dm/DM.cpp | 3 | ||||
-rw-r--r-- | dm/DMSrcSink.cpp | 2 | ||||
-rw-r--r-- | gm/gamut.cpp | 7 | ||||
-rw-r--r-- | gm/gradients.cpp | 10 | ||||
-rw-r--r-- | gyp/flags.gyp | 1 | ||||
-rw-r--r-- | include/core/SkColorSpace.h | 5 | ||||
-rw-r--r-- | samplecode/SampleApp.cpp | 3 | ||||
-rw-r--r-- | src/core/SkColorSpace.cpp | 2 | ||||
-rw-r--r-- | src/core/SkColorSpace_Base.h | 5 | ||||
-rw-r--r-- | tests/CodecTest.cpp | 3 | ||||
-rw-r--r-- | tests/ColorSpaceTest.cpp | 2 | ||||
-rw-r--r-- | tools/flags/SkCommonFlagsConfig.cpp | 3 | ||||
-rw-r--r-- | tools/skiaserve/Request.cpp | 14 |
15 files changed, 36 insertions, 30 deletions
diff --git a/bench/ColorCodecBench.cpp b/bench/ColorCodecBench.cpp index 3b0ff6706c..9ae5601d49 100644 --- a/bench/ColorCodecBench.cpp +++ b/bench/ColorCodecBench.cpp @@ -9,6 +9,7 @@ #include "Resources.h" #include "SkCodec.h" #include "SkCodecPriv.h" +#include "SkColorSpace_Base.h" #include "SkColorSpaceXform.h" #include "SkCommandLineFlags.h" @@ -168,7 +169,7 @@ void ColorCodecBench::onDelayedSetup() { if (FLAGS_half) { fDstInfo = fDstInfo.makeColorType(kRGBA_F16_SkColorType); - fDstSpace = fDstSpace->makeLinearGamma(); + fDstSpace = as_CSB(fDstSpace)->makeLinearGamma(); } fDstInfo = fDstInfo.makeColorSpace(fDstSpace); diff --git a/bench/nanobench.cpp b/bench/nanobench.cpp index 8d42b12f5e..e929a8069f 100644 --- a/bench/nanobench.cpp +++ b/bench/nanobench.cpp @@ -459,8 +459,9 @@ static void create_config(const SkCommandLineConfig* config, SkTArray<Config>* c auto srgbColorSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); CPU_CONFIG(srgb, kRaster_Backend, kN32_SkColorType, kPremul_SkAlphaType, srgbColorSpace) + auto srgbLinearColorSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGBLinear_Named); CPU_CONFIG(f16, kRaster_Backend, - kRGBA_F16_SkColorType, kPremul_SkAlphaType, srgbColorSpace->makeLinearGamma()) + kRGBA_F16_SkColorType, kPremul_SkAlphaType, srgbLinearColorSpace) } #undef CPU_CONFIG @@ -846,11 +846,12 @@ static Sink* create_sink(const SkCommandLineConfig* config) { if (FLAGS_cpu) { auto srgbColorSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); + auto srgbLinearColorSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGBLinear_Named); SINK("565", RasterSink, kRGB_565_SkColorType); SINK("8888", RasterSink, kN32_SkColorType); SINK("srgb", RasterSink, kN32_SkColorType, srgbColorSpace); - SINK("f16", RasterSink, kRGBA_F16_SkColorType, srgbColorSpace->makeLinearGamma()); + SINK("f16", RasterSink, kRGBA_F16_SkColorType, srgbLinearColorSpace); SINK("pdf", PDFSink); SINK("skp", SKPSink); SINK("pipe", PipeSink); diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp index 585a51d7fd..d4b5ace808 100644 --- a/dm/DMSrcSink.cpp +++ b/dm/DMSrcSink.cpp @@ -921,7 +921,7 @@ Error ColorCodecSrc::draw(SkCanvas* canvas) const { decodeInfo = decodeInfo.makeAlphaType(kPremul_SkAlphaType); } if (kRGBA_F16_SkColorType == fColorType) { - decodeInfo = decodeInfo.makeColorSpace(decodeInfo.colorSpace()->makeLinearGamma()); + decodeInfo = decodeInfo.makeColorSpace(as_CSB(decodeInfo.colorSpace())->makeLinearGamma()); } SkImageInfo bitmapInfo = decodeInfo; diff --git a/gm/gamut.cpp b/gm/gamut.cpp index 26231c5e8f..707da29f64 100644 --- a/gm/gamut.cpp +++ b/gm/gamut.cpp @@ -7,9 +7,10 @@ #include "gm.h" -#include "SkSurface.h" +#include "SkColorSpace_Base.h" #include "SkGradientShader.h" #include "SkPM4fPriv.h" +#include "SkSurface.h" static const int gRectSize = 50; static const SkScalar gScalarSize = SkIntToScalar(gRectSize); @@ -134,8 +135,8 @@ static void draw_gamut_grid(SkCanvas* canvas, SkTArray<SkAutoTDelete<CellRendere case kBGRA_8888_SkColorType: break; case kRGBA_F16_SkColorType: - srgbCS = srgbCS->makeLinearGamma(); - wideCS = wideCS->makeLinearGamma(); + srgbCS = as_CSB(srgbCS.get())->makeLinearGamma(); + wideCS = as_CSB(wideCS.get())->makeLinearGamma(); break; default: return; diff --git a/gm/gradients.cpp b/gm/gradients.cpp index d563814704..4c0c8e7972 100644 --- a/gm/gradients.cpp +++ b/gm/gradients.cpp @@ -61,7 +61,7 @@ static sk_sp<SkShader> MakeLinear(const SkPoint pts[2], const GradData& data, static sk_sp<SkShader> MakeLinear4f(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm, const SkMatrix& localMatrix) { - auto srgb = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named)->makeLinearGamma(); + auto srgb = SkColorSpace::NewNamed(SkColorSpace::kSRGBLinear_Named); return SkGradientShader::MakeLinear(pts, data.fColors4f, srgb, data.fPos, data.fCount, tm, 0, &localMatrix); } @@ -80,7 +80,7 @@ static sk_sp<SkShader> MakeRadial4f(const SkPoint pts[2], const GradData& data, SkPoint center; center.set(SkScalarAve(pts[0].fX, pts[1].fX), SkScalarAve(pts[0].fY, pts[1].fY)); - auto srgb = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named)->makeLinearGamma(); + auto srgb = SkColorSpace::NewNamed(SkColorSpace::kSRGBLinear_Named); return SkGradientShader::MakeRadial(center, center.fX, data.fColors4f, srgb, data.fPos, data.fCount, tm, 0, &localMatrix); } @@ -99,7 +99,7 @@ static sk_sp<SkShader> MakeSweep4f(const SkPoint pts[2], const GradData& data, SkPoint center; center.set(SkScalarAve(pts[0].fX, pts[1].fX), SkScalarAve(pts[0].fY, pts[1].fY)); - auto srgb = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named)->makeLinearGamma(); + auto srgb = SkColorSpace::NewNamed(SkColorSpace::kSRGBLinear_Named); return SkGradientShader::MakeSweep(center.fX, center.fY, data.fColors4f, srgb, data.fPos, data.fCount, 0, &localMatrix); } @@ -124,7 +124,7 @@ static sk_sp<SkShader> Make2Radial4f(const SkPoint pts[2], const GradData& data, SkScalarAve(pts[0].fY, pts[1].fY)); center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3) / 5), SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1) / 4)); - auto srgb = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named)->makeLinearGamma(); + auto srgb = SkColorSpace::NewNamed(SkColorSpace::kSRGBLinear_Named); return SkGradientShader::MakeTwoPointConical(center1, (pts[1].fX - pts[0].fX) / 7, center0, (pts[1].fX - pts[0].fX) / 2, data.fColors4f, srgb, data.fPos, data.fCount, tm, @@ -150,7 +150,7 @@ static sk_sp<SkShader> Make2Conical4f(const SkPoint pts[2], const GradData& data SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3; center0.set(pts[0].fX + radius0, pts[0].fY + radius0); center1.set(pts[1].fX - radius1, pts[1].fY - radius1); - auto srgb = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named)->makeLinearGamma(); + auto srgb = SkColorSpace::NewNamed(SkColorSpace::kSRGBLinear_Named); return SkGradientShader::MakeTwoPointConical(center1, radius1, center0, radius0, data.fColors4f, srgb, data.fPos, data.fCount, tm, 0, &localMatrix); diff --git a/gyp/flags.gyp b/gyp/flags.gyp index 166e24b55a..d1a4004e45 100644 --- a/gyp/flags.gyp +++ b/gyp/flags.gyp @@ -39,6 +39,7 @@ 'include_dirs': [ '../include/gpu', '../include/private', + '../src/core', '../src/gpu', ], 'sources': [ diff --git a/include/core/SkColorSpace.h b/include/core/SkColorSpace.h index b1daf4f232..26dd2211f5 100644 --- a/include/core/SkColorSpace.h +++ b/include/core/SkColorSpace.h @@ -107,11 +107,6 @@ public: static sk_sp<SkColorSpace> NewICC(const void*, size_t); /** - * Create an SkColorSpace with the same gamut as this color space, but with linear gamma. - */ - sk_sp<SkColorSpace> makeLinearGamma(); - - /** * Returns true if the color space gamma is near enough to be approximated as sRGB. */ bool gammaCloseToSRGB() const; diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp index 1ee15df2f5..4b4621698f 100644 --- a/samplecode/SampleApp.cpp +++ b/samplecode/SampleApp.cpp @@ -12,6 +12,7 @@ #include "SampleCode.h" #include "SkAnimTimer.h" #include "SkCanvas.h" +#include "SkColorSpace_Base.h" #include "SkCommandLineFlags.h" #include "SkData.h" #include "SkDocument.h" @@ -1675,7 +1676,7 @@ bool SampleWindow::onEvent(const SkEvent& evt) { } if (kRGBA_F16_SkColorType == gConfig[selected].fColorType) { SkASSERT(colorSpace); - colorSpace = colorSpace->makeLinearGamma(); + colorSpace = as_CSB(colorSpace)->makeLinearGamma(); } this->setDeviceColorType(gConfig[selected].fColorType, colorSpace); return true; diff --git a/src/core/SkColorSpace.cpp b/src/core/SkColorSpace.cpp index 6c4b474b76..405285636b 100644 --- a/src/core/SkColorSpace.cpp +++ b/src/core/SkColorSpace.cpp @@ -287,7 +287,7 @@ sk_sp<SkColorSpace> SkColorSpace::NewNamed(Named named) { return nullptr; } -sk_sp<SkColorSpace> SkColorSpace::makeLinearGamma() { +sk_sp<SkColorSpace> SkColorSpace_Base::makeLinearGamma() { if (this->gammaIsLinear()) { return sk_ref_sp(this); } diff --git a/src/core/SkColorSpace_Base.h b/src/core/SkColorSpace_Base.h index f0e26be7f2..04f9b0b108 100644 --- a/src/core/SkColorSpace_Base.h +++ b/src/core/SkColorSpace_Base.h @@ -179,6 +179,11 @@ public: const SkMatrix44& toXYZD50() const { return fToXYZD50; } const SkMatrix44& fromXYZD50() const; + + /** + * Create an SkColorSpace with the same gamut as this color space, but with linear gamma. + */ + sk_sp<SkColorSpace> makeLinearGamma(); private: diff --git a/tests/CodecTest.cpp b/tests/CodecTest.cpp index bae8344bad..4d18c61860 100644 --- a/tests/CodecTest.cpp +++ b/tests/CodecTest.cpp @@ -10,6 +10,7 @@ #include "SkBitmap.h" #include "SkCodec.h" #include "SkCodecImageGenerator.h" +#include "SkColorSpace_Base.h" #include "SkData.h" #include "SkImageEncoder.h" #include "SkFrontBufferedStream.h" @@ -1191,7 +1192,7 @@ static void test_conversion_possible(skiatest::Reporter* r, const char* path, REPORTER_ASSERT(r, SkCodec::kUnimplemented == result); } - infoF16 = infoF16.makeColorSpace(infoF16.colorSpace()->makeLinearGamma()); + infoF16 = infoF16.makeColorSpace(as_CSB(infoF16.colorSpace())->makeLinearGamma()); result = codec->getPixels(infoF16, bm.getPixels(), bm.rowBytes()); REPORTER_ASSERT(r, SkCodec::kSuccess == result); result = codec->startScanlineDecode(infoF16); diff --git a/tests/ColorSpaceTest.cpp b/tests/ColorSpaceTest.cpp index fabeeb81f8..e9cc14ff45 100644 --- a/tests/ColorSpaceTest.cpp +++ b/tests/ColorSpaceTest.cpp @@ -121,7 +121,7 @@ DEF_TEST(ColorSpaceSRGBLinearCompare, r) { // Create the linear sRGB color space via the sRGB color space's makeLinearGamma() sk_sp<SkColorSpace> viaSrgbColorSpace = - SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named)->makeLinearGamma(); + as_CSB(SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named))->makeLinearGamma(); REPORTER_ASSERT(r, namedColorSpace == viaSrgbColorSpace); // Create a linear sRGB color space by value diff --git a/tools/flags/SkCommonFlagsConfig.cpp b/tools/flags/SkCommonFlagsConfig.cpp index 14084ce0e0..3fd8a97b4b 100644 --- a/tools/flags/SkCommonFlagsConfig.cpp +++ b/tools/flags/SkCommonFlagsConfig.cpp @@ -5,6 +5,7 @@ * found in the LICENSE file. */ +#include "SkColorSpace_Base.h" #include "SkCommonFlagsConfig.h" #include "SkImageInfo.h" @@ -303,7 +304,7 @@ static bool parse_option_gpu_color(const SkString& value, // Now pick a color type if (commands[0].equals("f16")) { *outColorType = kRGBA_F16_SkColorType; - *outColorSpace = colorSpace->makeLinearGamma(); + *outColorSpace = as_CSB(colorSpace)->makeLinearGamma(); return true; } if (commands[0].equals("srgb")) { diff --git a/tools/skiaserve/Request.cpp b/tools/skiaserve/Request.cpp index ef1f757595..d27f2c0792 100644 --- a/tools/skiaserve/Request.cpp +++ b/tools/skiaserve/Request.cpp @@ -174,10 +174,9 @@ ColorAndProfile ColorModes[] = { SkSurface* Request::createCPUSurface() { SkIRect bounds = this->getBounds(); ColorAndProfile cap = ColorModes[fColorMode]; - auto colorSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); - if (kRGBA_F16_SkColorType == cap.fColorType) { - colorSpace = colorSpace->makeLinearGamma(); - } + auto colorSpace = kRGBA_F16_SkColorType == cap.fColorType + ? SkColorSpace::NewNamed(SkColorSpace::kSRGBLinear_Named) + : SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); SkImageInfo info = SkImageInfo::Make(bounds.width(), bounds.height(), cap.fColorType, kPremul_SkAlphaType, cap.fSRGB ? colorSpace : nullptr); return SkSurface::MakeRaster(info).release(); @@ -187,10 +186,9 @@ SkSurface* Request::createGPUSurface() { GrContext* context = this->getContext(); SkIRect bounds = this->getBounds(); ColorAndProfile cap = ColorModes[fColorMode]; - auto colorSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); - if (kRGBA_F16_SkColorType == cap.fColorType) { - colorSpace = colorSpace->makeLinearGamma(); - } + auto colorSpace = kRGBA_F16_SkColorType == cap.fColorType + ? SkColorSpace::NewNamed(SkColorSpace::kSRGBLinear_Named) + : SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); SkImageInfo info = SkImageInfo::Make(bounds.width(), bounds.height(), cap.fColorType, kPremul_SkAlphaType, cap.fSRGB ? colorSpace: nullptr); SkSurface* surface = SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, info).release(); |