Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkAutoPixmapStorage.h" | 8 #include "SkAutoPixmapStorage.h" |
| 9 #include "GrCaps.h" | 9 #include "GrCaps.h" |
| 10 #include "GrContext.h" | 10 #include "GrContext.h" |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 36 SkNotifyBitmapGenIDIsStale(this->uniqueID()); | 36 SkNotifyBitmapGenIDIsStale(this->uniqueID()); |
| 37 } | 37 } |
| 38 } | 38 } |
| 39 | 39 |
| 40 extern void SkTextureImageApplyBudgetedDecision(SkImage* image) { | 40 extern void SkTextureImageApplyBudgetedDecision(SkImage* image) { |
| 41 if (image->isTextureBacked()) { | 41 if (image->isTextureBacked()) { |
| 42 ((SkImage_Gpu*)image)->applyBudgetDecision(); | 42 ((SkImage_Gpu*)image)->applyBudgetDecision(); |
| 43 } | 43 } |
| 44 } | 44 } |
| 45 | 45 |
| 46 SkImageInfo SkImage_Gpu::onImageInfo() const { | |
| 47 SkColorType ct; | |
| 48 if (!GrPixelConfigToColorType(fTexture->config(), &ct)) { | |
| 49 ct = kUnknown_SkColorType; | |
| 50 } | |
| 51 return SkImageInfo::Make(fTexture->width(), fTexture->height(), ct, fAlphaTy pe, fColorSpace); | |
|
Brian Osman
2016/07/21 20:57:07
This is now slightly different semantically - it u
| |
| 52 } | |
| 53 | |
| 46 static SkImageInfo make_info(int w, int h, bool isOpaque, sk_sp<SkColorSpace> co lorSpace) { | 54 static SkImageInfo make_info(int w, int h, bool isOpaque, sk_sp<SkColorSpace> co lorSpace) { |
| 47 return SkImageInfo::MakeN32(w, h, isOpaque ? kOpaque_SkAlphaType : kPremul_S kAlphaType, | 55 return SkImageInfo::MakeN32(w, h, isOpaque ? kOpaque_SkAlphaType : kPremul_S kAlphaType, |
| 48 std::move(colorSpace)); | 56 std::move(colorSpace)); |
| 49 } | 57 } |
| 50 | 58 |
| 51 bool SkImage_Gpu::getROPixels(SkBitmap* dst, CachingHint chint) const { | 59 bool SkImage_Gpu::getROPixels(SkBitmap* dst, CachingHint chint) const { |
| 52 if (SkBitmapCache::Find(this->uniqueID(), dst)) { | 60 if (SkBitmapCache::Find(this->uniqueID(), dst)) { |
| 53 SkASSERT(dst->getGenerationID() == this->uniqueID()); | 61 SkASSERT(dst->getGenerationID() == this->uniqueID()); |
| 54 SkASSERT(dst->isImmutable()); | 62 SkASSERT(dst->isImmutable()); |
| 55 SkASSERT(dst->getPixels()); | 63 SkASSERT(dst->getPixels()); |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 309 } | 317 } |
| 310 SkBitmap bmp; | 318 SkBitmap bmp; |
| 311 if (!this->asLegacyBitmap(&bmp, kRO_LegacyBitmapMode)) { | 319 if (!this->asLegacyBitmap(&bmp, kRO_LegacyBitmapMode)) { |
| 312 return nullptr; | 320 return nullptr; |
| 313 } | 321 } |
| 314 GrBitmapTextureMaker maker(context, bmp); | 322 GrBitmapTextureMaker maker(context, bmp); |
| 315 return create_image_from_maker(&maker, at, this->uniqueID()); | 323 return create_image_from_maker(&maker, at, this->uniqueID()); |
| 316 } | 324 } |
| 317 | 325 |
| 318 sk_sp<SkImage> SkImage::makeNonTextureImage() const { | 326 sk_sp<SkImage> SkImage::makeNonTextureImage() const { |
| 319 GrTexture* texture = as_IB(this)->peekTexture(); | 327 if (!this->isTextureBacked()) { |
| 320 if (!texture) { | |
| 321 return sk_ref_sp(const_cast<SkImage*>(this)); | 328 return sk_ref_sp(const_cast<SkImage*>(this)); |
| 322 } | 329 } |
| 323 SkColorType ct; | 330 SkImageInfo info = as_IB(this)->onImageInfo(); |
|
Brian Osman
2016/07/21 20:57:07
Similar to above. We already have the *correct* al
| |
| 324 sk_sp<SkColorSpace> cs; | |
| 325 if (!GrPixelConfigToColorAndColorSpace(texture->config(), &ct, &cs)) { | |
| 326 return nullptr; | |
| 327 } | |
| 328 SkAlphaType at = this->isOpaque() ? kOpaque_SkAlphaType : kPremul_SkAlphaTyp e; | |
| 329 auto info = SkImageInfo::Make(this->width(), this->height(), ct, at, cs); | |
| 330 size_t rowBytes = info.minRowBytes(); | 331 size_t rowBytes = info.minRowBytes(); |
| 331 size_t size = info.getSafeSize(rowBytes); | 332 size_t size = info.getSafeSize(rowBytes); |
| 332 auto data = SkData::MakeUninitialized(size); | 333 auto data = SkData::MakeUninitialized(size); |
| 333 if (!data) { | 334 if (!data) { |
| 334 return nullptr; | 335 return nullptr; |
| 335 } | 336 } |
| 336 SkPixmap pm(info, data->writable_data(), rowBytes); | 337 SkPixmap pm(info, data->writable_data(), rowBytes); |
| 337 if (!this->readPixels(pm, 0, 0, kDisallow_CachingHint)) { | 338 if (!this->readPixels(pm, 0, 0, kDisallow_CachingHint)) { |
| 338 return nullptr; | 339 return nullptr; |
| 339 } | 340 } |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 545 return nullptr; | 546 return nullptr; |
| 546 } | 547 } |
| 547 SkAutoTUnref<GrTexture> texture(GrUploadMipMapToTexture(ctx, info, texels, m ipLevelCount)); | 548 SkAutoTUnref<GrTexture> texture(GrUploadMipMapToTexture(ctx, info, texels, m ipLevelCount)); |
| 548 if (!texture) { | 549 if (!texture) { |
| 549 return nullptr; | 550 return nullptr; |
| 550 } | 551 } |
| 551 return sk_make_sp<SkImage_Gpu>(texture->width(), texture->height(), kNeedNew ImageUniqueID, | 552 return sk_make_sp<SkImage_Gpu>(texture->width(), texture->height(), kNeedNew ImageUniqueID, |
| 552 info.alphaType(), texture, sk_ref_sp(info.col orSpace()), | 553 info.alphaType(), texture, sk_ref_sp(info.col orSpace()), |
| 553 budgeted); | 554 budgeted); |
| 554 } | 555 } |
| OLD | NEW |