Index: tools/viewer/sk_app/WindowContext.cpp |
diff --git a/tools/viewer/sk_app/WindowContext.cpp b/tools/viewer/sk_app/WindowContext.cpp |
index 41bbd14576b37f604c8f65d7001b8de076932553..f438789777eaa48ddddea403cf95da6c05098c1a 100755 |
--- a/tools/viewer/sk_app/WindowContext.cpp |
+++ b/tools/viewer/sk_app/WindowContext.cpp |
@@ -21,24 +21,33 @@ |
namespace sk_app { |
-sk_sp<SkSurface> WindowContext::createRenderSurface(sk_sp<GrRenderTarget> rt, int colorBits) { |
+sk_sp<SkSurface> WindowContext::createRenderSurface( |
+ sk_sp<GrRenderTarget> rt, int colorBits, bool offscreen, bool sRGB) { |
auto flags = (fSurfaceProps.flags() & ~SkSurfaceProps::kGammaCorrect_Flag) | |
- (GrPixelConfigIsSRGB(fPixelConfig) ? SkSurfaceProps::kGammaCorrect_Flag : 0); |
+ (GrPixelConfigIsSRGB(fPixelConfig) || sRGB ? |
+ SkSurfaceProps::kGammaCorrect_Flag : 0); |
SkSurfaceProps props(flags, fSurfaceProps.pixelGeometry()); |
- if (!this->isGpuContext() || colorBits > 24 || |
+ if (!this->isGpuContext() || colorBits > 24 || offscreen || |
kRGBA_F16_SkColorType == fDisplayParams.fColorType) { |
// If we're rendering to F16, we need an off-screen surface - the current render |
// target is most likely the wrong format. |
// |
// If we're rendering raster data or using a deep (10-bit or higher) surface, we probably |
// need an off-screen surface. 10-bit, in particular, has strange gamma behavior. |
- SkImageInfo info = SkImageInfo::Make(fWidth, fHeight, |
- fDisplayParams.fColorType, |
- kUnknown_SkAlphaType, |
- fDisplayParams.fProfileType); |
- return SkSurface::MakeRenderTarget(fContext, SkBudgeted::kNo, info, |
- fDisplayParams.fMSAASampleCount, &props); |
+ SkImageInfo info = SkImageInfo::Make( |
+ fWidth, fHeight, |
+ fDisplayParams.fColorType, |
+ kPremul_SkAlphaType, |
+ (sRGB || fDisplayParams.fProfileType == kSRGB_SkColorProfileType) ? |
+ SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named) : nullptr |
+ ); |
+ if (this->isGpuContext()) { |
+ return SkSurface::MakeRenderTarget(fContext, SkBudgeted::kNo, info, |
+ fDisplayParams.fMSAASampleCount, &props); |
+ } else { |
+ return SkSurface::MakeRaster(info, &props); |
+ } |
} else { |
return SkSurface::MakeRenderTargetDirect(rt.get(), &props); |
} |