aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--bench/ColorCodecBench.cpp3
-rw-r--r--bench/nanobench.cpp3
-rw-r--r--dm/DM.cpp3
-rw-r--r--dm/DMSrcSink.cpp2
-rw-r--r--gm/gamut.cpp7
-rw-r--r--gm/gradients.cpp10
-rw-r--r--gyp/flags.gyp1
-rw-r--r--include/core/SkColorSpace.h5
-rw-r--r--samplecode/SampleApp.cpp3
-rw-r--r--src/core/SkColorSpace.cpp2
-rw-r--r--src/core/SkColorSpace_Base.h5
-rw-r--r--tests/CodecTest.cpp3
-rw-r--r--tests/ColorSpaceTest.cpp2
-rw-r--r--tools/flags/SkCommonFlagsConfig.cpp3
-rw-r--r--tools/skiaserve/Request.cpp14
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
diff --git a/dm/DM.cpp b/dm/DM.cpp
index 0ce3738e32..f9c831a9a8 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -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();