diff options
author | Brian Osman <brianosman@google.com> | 2016-12-14 15:42:36 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2016-12-14 21:14:52 +0000 |
commit | 222e9ad98be456c1aa5ef7be38a7ea11a3e3a7f1 (patch) | |
tree | 8d53ea576b8fd8ac99f11a39e2e377b9d380c150 /src/core/SkPictureImageGenerator.cpp | |
parent | 31c2608e859b1f1c25eeea429f5ab2fee1529fac (diff) |
Make picture backed images sRGB by default
This adds support for playing back a picture image in a different
color space. This is currently limited to just the original space
(sRGB) or legacy mode. I think the best next step is to make them
fully flexible (playing back in the destination surface's space),
but that's going to involve changes to caching logic. I'd like to
keep that separate.
BUG=skia:
Change-Id: I15e6d44e977328b06a4da008ff7b2ed88d851a0b
Reviewed-on: https://skia-review.googlesource.com/5777
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
Diffstat (limited to 'src/core/SkPictureImageGenerator.cpp')
-rw-r--r-- | src/core/SkPictureImageGenerator.cpp | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/src/core/SkPictureImageGenerator.cpp b/src/core/SkPictureImageGenerator.cpp index bf6d53feec..d4cf92eb94 100644 --- a/src/core/SkPictureImageGenerator.cpp +++ b/src/core/SkPictureImageGenerator.cpp @@ -26,7 +26,7 @@ protected: bool onGenerateScaledPixels(const SkISize&, const SkIPoint&, const SkPixmap&) override; #if SK_SUPPORT_GPU - GrTexture* onGenerateTexture(GrContext*, const SkIRect&) override; + GrTexture* onGenerateTexture(GrContext*, const SkImageInfo&, const SkIPoint&) override; #endif private: @@ -50,7 +50,7 @@ SkImageGenerator* SkPictureImageGenerator::Create(const SkISize& size, const SkP SkPictureImageGenerator::SkPictureImageGenerator(const SkISize& size, const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint) - : INHERITED(SkImageInfo::MakeN32Premul(size)) + : INHERITED(SkImageInfo::MakeS32(size.width(), size.height(), kPremul_SkAlphaType)) , fPicture(SkRef(picture)) { if (matrix) { @@ -66,7 +66,7 @@ SkPictureImageGenerator::SkPictureImageGenerator(const SkISize& size, const SkPi bool SkPictureImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, SkPMColor ctable[], int* ctableCount) { - if (info != getInfo() || ctable || ctableCount) { + if (ctable || ctableCount) { return false; } @@ -132,20 +132,18 @@ SkImageGenerator* SkImageGenerator::NewFromPicture(const SkISize& size, const Sk #if SK_SUPPORT_GPU #include "GrTexture.h" -GrTexture* SkPictureImageGenerator::onGenerateTexture(GrContext* ctx, const SkIRect& subset) { - const SkImageInfo& info = this->getInfo(); - SkImageInfo surfaceInfo = info.makeWH(subset.width(), subset.height()); - +GrTexture* SkPictureImageGenerator::onGenerateTexture(GrContext* ctx, const SkImageInfo& info, + const SkIPoint& origin) { // // TODO: respect the usage, by possibly creating a different (pow2) surface // - sk_sp<SkSurface> surface(SkSurface::MakeRenderTarget(ctx, SkBudgeted::kYes, surfaceInfo)); + sk_sp<SkSurface> surface(SkSurface::MakeRenderTarget(ctx, SkBudgeted::kYes, info)); if (!surface) { return nullptr; } SkMatrix matrix = fMatrix; - matrix.postTranslate(-subset.x(), -subset.y()); + matrix.postTranslate(-origin.x(), -origin.y()); surface->getCanvas()->clear(0); // does NewRenderTarget promise to do this for us? surface->getCanvas()->drawPicture(fPicture.get(), &matrix, fPaint.getMaybeNull()); sk_sp<SkImage> image(surface->makeImageSnapshot()); |