Chromium Code Reviews| Index: cc/resources/resource_provider.cc |
| diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
| index ce9b233b6790206c69a9374a594bb0eaa79c9d95..7aae2b21e6ba2673b1e35ccdf5ced973b4acef75 100644 |
| --- a/cc/resources/resource_provider.cc |
| +++ b/cc/resources/resource_provider.cc |
| @@ -663,6 +663,7 @@ ResourceId ResourceProvider::CreateResourceFromTextureMailbox( |
| } |
| resource->allocated = true; |
| resource->set_mailbox(mailbox); |
| + resource->color_space = mailbox.color_space(); |
| resource->release_callback_impl = |
| base::Bind(&SingleReleaseCallbackImpl::Run, |
| base::Owned(release_callback_impl.release())); |
| @@ -810,6 +811,12 @@ ResourceProvider::TextureHint ResourceProvider::GetTextureHint(ResourceId id) { |
| return GetResource(id)->hint; |
| } |
| +static sk_sp<SkColorSpace> toSkColorSpace(const gfx::ColorSpace& color_space) { |
|
danakj
2016/08/12 21:03:48
chromium style function names plz.
ColorSpaceToSk
Justin Novosad
2016/08/15 18:07:04
Done.
|
| + // TODO(crbug.com/634102): Implement conversion for skia-based compositing to |
| + // be color-managed |
| + return nullptr; |
| +} |
| + |
| void ResourceProvider::CopyToResource(ResourceId id, |
| const uint8_t* image, |
| const gfx::Size& image_size) { |
| @@ -831,7 +838,8 @@ void ResourceProvider::CopyToResource(ResourceId id, |
| DCHECK(resource->allocated); |
| DCHECK_EQ(RGBA_8888, resource->format); |
| SkImageInfo source_info = |
| - SkImageInfo::MakeN32Premul(image_size.width(), image_size.height()); |
| + SkImageInfo::MakeN32Premul(image_size.width(), image_size.height(), |
| + toSkColorSpace(resource->color_space)); |
| size_t image_stride = image_size.width() * 4; |
| ScopedWriteLockSoftware lock(this, id); |
| @@ -1156,8 +1164,9 @@ ResourceProvider::ScopedSkSurfaceProvider::~ScopedSkSurfaceProvider() { |
| void ResourceProvider::PopulateSkBitmapWithResource(SkBitmap* sk_bitmap, |
| const Resource* resource) { |
| DCHECK_EQ(RGBA_8888, resource->format); |
| - SkImageInfo info = SkImageInfo::MakeN32Premul(resource->size.width(), |
| - resource->size.height()); |
| + SkImageInfo info = SkImageInfo::MakeN32Premul( |
| + resource->size.width(), resource->size.height(), |
| + toSkColorSpace(resource->color_space)); |
| sk_bitmap->installPixels(info, resource->pixels, info.minRowBytes()); |
| } |
| @@ -1190,7 +1199,9 @@ ResourceProvider::ScopedReadLockSkImage::ScopedReadLockSkImage( |
| desc.fOrigin = kTopLeft_GrSurfaceOrigin; |
| desc.fTextureHandle = skia::GrGLTextureInfoToGrBackendObject(texture_info); |
| sk_image_ = SkImage::MakeFromTexture( |
| - resource_provider->compositor_context_provider_->GrContext(), desc); |
| + resource_provider->compositor_context_provider_->GrContext(), desc, |
| + kPremul_SkAlphaType, toSkColorSpace(resource->color_space), nullptr, |
| + nullptr); |
| } else if (resource->pixels) { |
| SkBitmap sk_bitmap; |
| ResourceProvider::PopulateSkBitmapWithResource(&sk_bitmap, resource); |