| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "gm.h" | 8 #include "gm.h" |
| 9 | 9 |
| 10 #include "SkSurface.h" | 10 #include "SkSurface.h" |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 const float gWideGamutRGB_toXYZD50[]{ | 118 const float gWideGamutRGB_toXYZD50[]{ |
| 119 0.7161046f, 0.1009296f, 0.1471858f, // -> X | 119 0.7161046f, 0.1009296f, 0.1471858f, // -> X |
| 120 0.2581874f, 0.7249378f, 0.0168748f, // -> Y | 120 0.2581874f, 0.7249378f, 0.0168748f, // -> Y |
| 121 0.0000000f, 0.0517813f, 0.7734287f, // -> Z | 121 0.0000000f, 0.0517813f, 0.7734287f, // -> Z |
| 122 }; | 122 }; |
| 123 | 123 |
| 124 SkMatrix44 wideGamutRGB_toXYZD50(SkMatrix44::kUninitialized_Constructor); | 124 SkMatrix44 wideGamutRGB_toXYZD50(SkMatrix44::kUninitialized_Constructor); |
| 125 wideGamutRGB_toXYZD50.set3x3RowMajorf(gWideGamutRGB_toXYZD50); | 125 wideGamutRGB_toXYZD50.set3x3RowMajorf(gWideGamutRGB_toXYZD50); |
| 126 | 126 |
| 127 // Use the original canvas' color type, but account for gamma requirements | 127 // Use the original canvas' color type, but account for gamma requirements |
| 128 SkColorType colorType = canvas->imageInfo().colorType(); | 128 SkImageInfo origInfo = canvas->imageInfo(); |
| 129 if (kUnknown_SkColorType == colorType) { | |
| 130 // This can happen when recording (in which case we'll just use 8888 off
screen surfaces) | |
| 131 colorType = kN32_SkColorType; | |
| 132 } | |
| 133 auto srgbCS = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); | 129 auto srgbCS = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); |
| 134 auto wideCS = SkColorSpace::NewRGB(SkColorSpace::kSRGB_RenderTargetGamma, | 130 auto wideCS = SkColorSpace::NewRGB(SkColorSpace::kSRGB_RenderTargetGamma, |
| 135 wideGamutRGB_toXYZD50); | 131 wideGamutRGB_toXYZD50); |
| 136 switch (colorType) { | 132 switch (origInfo.colorType()) { |
| 137 case kRGBA_8888_SkColorType: | 133 case kRGBA_8888_SkColorType: |
| 138 case kBGRA_8888_SkColorType: | 134 case kBGRA_8888_SkColorType: |
| 139 break; | 135 break; |
| 140 case kRGBA_F16_SkColorType: | 136 case kRGBA_F16_SkColorType: |
| 141 srgbCS = srgbCS->makeLinearGamma(); | 137 srgbCS = srgbCS->makeLinearGamma(); |
| 142 wideCS = wideCS->makeLinearGamma(); | 138 wideCS = wideCS->makeLinearGamma(); |
| 143 break; | 139 break; |
| 144 default: | 140 default: |
| 145 return; | 141 return; |
| 146 } | 142 } |
| 147 | 143 |
| 148 // Make our two working surfaces (one sRGB, one Adobe) | 144 // Make our two working surfaces (one sRGB, one Adobe) |
| 149 SkImageInfo srgbGamutInfo = SkImageInfo::Make(gRectSize, gRectSize, colorTyp
e, | 145 SkImageInfo srgbGamutInfo = SkImageInfo::Make(gRectSize, gRectSize, origInfo
.colorType(), |
| 150 kPremul_SkAlphaType, srgbCS); | 146 kPremul_SkAlphaType, srgbCS); |
| 151 SkImageInfo wideGamutInfo = SkImageInfo::Make(gRectSize, gRectSize, colorTyp
e, | 147 SkImageInfo wideGamutInfo = SkImageInfo::Make(gRectSize, gRectSize, origInfo
.colorType(), |
| 152 kPremul_SkAlphaType, wideCS); | 148 kPremul_SkAlphaType, wideCS); |
| 153 // readPixels doesn't do color conversion (yet), so we can use it to see the
raw (wide) data | 149 // readPixels doesn't do color conversion (yet), so we can use it to see the
raw (wide) data |
| 154 SkImageInfo dstInfo = srgbGamutInfo.makeColorSpace(nullptr); | 150 SkImageInfo dstInfo = srgbGamutInfo.makeColorSpace(nullptr); |
| 155 sk_sp<SkSurface> srgbGamutSurface = canvas->makeSurface(srgbGamutInfo); | 151 sk_sp<SkSurface> srgbGamutSurface = canvas->makeSurface(srgbGamutInfo); |
| 156 if (!srgbGamutSurface) { | |
| 157 srgbGamutSurface = SkSurface::MakeRaster(srgbGamutInfo); | |
| 158 } | |
| 159 sk_sp<SkSurface> wideGamutSurface = canvas->makeSurface(wideGamutInfo); | 152 sk_sp<SkSurface> wideGamutSurface = canvas->makeSurface(wideGamutInfo); |
| 160 if (!wideGamutSurface) { | 153 if (!srgbGamutSurface || !wideGamutSurface) { |
| 161 wideGamutSurface = SkSurface::MakeRaster(wideGamutInfo); | 154 return; |
| 162 } | 155 } |
| 163 SkCanvas* srgbGamutCanvas = srgbGamutSurface->getCanvas(); | 156 SkCanvas* srgbGamutCanvas = srgbGamutSurface->getCanvas(); |
| 164 SkCanvas* wideGamutCanvas = wideGamutSurface->getCanvas(); | 157 SkCanvas* wideGamutCanvas = wideGamutSurface->getCanvas(); |
| 165 | 158 |
| 166 SkPaint textPaint; | 159 SkPaint textPaint; |
| 167 textPaint.setAntiAlias(true); | 160 textPaint.setAntiAlias(true); |
| 168 textPaint.setColor(SK_ColorWHITE); | 161 textPaint.setColor(SK_ColorWHITE); |
| 169 sk_tool_utils::set_portable_typeface(&textPaint); | 162 sk_tool_utils::set_portable_typeface(&textPaint); |
| 170 | 163 |
| 171 SkScalar x = 0, y = 0; | 164 SkScalar x = 0, y = 0; |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 renderers.push_back(new GradientCellRenderer(SK_ColorRED, SK_ColorGREEN, tru
e)); | 218 renderers.push_back(new GradientCellRenderer(SK_ColorRED, SK_ColorGREEN, tru
e)); |
| 226 renderers.push_back(new GradientCellRenderer(SK_ColorGREEN, SK_ColorBLACK, t
rue)); | 219 renderers.push_back(new GradientCellRenderer(SK_ColorGREEN, SK_ColorBLACK, t
rue)); |
| 227 renderers.push_back(new GradientCellRenderer(SK_ColorGREEN, SK_ColorWHITE, t
rue)); | 220 renderers.push_back(new GradientCellRenderer(SK_ColorGREEN, SK_ColorWHITE, t
rue)); |
| 228 | 221 |
| 229 // Vertex colors | 222 // Vertex colors |
| 230 renderers.push_back(new VerticesCellRenderer(SK_ColorRED, SK_ColorRED)); | 223 renderers.push_back(new VerticesCellRenderer(SK_ColorRED, SK_ColorRED)); |
| 231 renderers.push_back(new VerticesCellRenderer(SK_ColorRED, SK_ColorGREEN)); | 224 renderers.push_back(new VerticesCellRenderer(SK_ColorRED, SK_ColorGREEN)); |
| 232 | 225 |
| 233 draw_gamut_grid(canvas, renderers); | 226 draw_gamut_grid(canvas, renderers); |
| 234 } | 227 } |
| OLD | NEW |