| 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);
|
| }
|
|
|