From 366093f2124c38fa5c590c9ed2d1811817fed8ee Mon Sep 17 00:00:00 2001 From: Brian Salomon Date: Tue, 13 Feb 2018 09:25:22 -0500 Subject: Make it so that GrSurfaceContext with a sRGB GrPixelConfig must have a color space with a sRGB-like gamma. Change-Id: I99b80a9846caacd6848b0f9f55ed0f7f23e69b90 Reviewed-on: https://skia-review.googlesource.com/106640 Commit-Queue: Brian Salomon Reviewed-by: Brian Osman --- src/gpu/GrResourceProvider.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/gpu/GrResourceProvider.cpp') diff --git a/src/gpu/GrResourceProvider.cpp b/src/gpu/GrResourceProvider.cpp index 13c326a96a..df09e27d7e 100644 --- a/src/gpu/GrResourceProvider.cpp +++ b/src/gpu/GrResourceProvider.cpp @@ -135,8 +135,17 @@ sk_sp GrResourceProvider::createTexture(const GrSurfaceDesc& desc, fit, budgeted); if (proxy) { + // We use an ephemeral surface context to do the write pixels. Here it isn't clear what + // color space to tag it with. That's ok because GrSurfaceContext::writePixels doesn't + // do any color space conversions. Though, that is likely to change. However, if the + // pixel config is sRGB then the passed color space here must have sRGB gamma or + // GrSurfaceContext creation fails. + sk_sp colorSpace; + if (GrPixelConfigIsSRGB(desc.fConfig)) { + colorSpace = SkColorSpace::MakeSRGB(); + } sk_sp sContext = context->contextPriv().makeWrappedSurfaceContext( - std::move(proxy)); + std::move(proxy), std::move(colorSpace)); if (sContext) { if (sContext->writePixels(srcInfo, mipLevel.fPixels, mipLevel.fRowBytes, 0, 0)) { return sk_ref_sp(sContext->asTextureProxy()->priv().peekTexture()); -- cgit v1.2.3