| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 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 #include "SkSpecialImage.h" | 7 #include "SkSpecialImage.h" |
| 8 | 8 |
| 9 #if SK_SUPPORT_GPU | 9 #if SK_SUPPORT_GPU |
| 10 #include "GrTexture.h" | 10 #include "GrTexture.h" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 | 34 |
| 35 // Delete this entry point ASAP (see skbug.com/4965) | 35 // Delete this entry point ASAP (see skbug.com/4965) |
| 36 virtual bool getBitmapDeprecated(SkBitmap* result) const = 0; | 36 virtual bool getBitmapDeprecated(SkBitmap* result) const = 0; |
| 37 | 37 |
| 38 virtual sk_sp<SkSpecialImage> onMakeSubset(const SkIRect& subset) const = 0; | 38 virtual sk_sp<SkSpecialImage> onMakeSubset(const SkIRect& subset) const = 0; |
| 39 | 39 |
| 40 virtual sk_sp<SkSpecialSurface> onMakeSurface(const SkImageInfo& info) const
= 0; | 40 virtual sk_sp<SkSpecialSurface> onMakeSurface(const SkImageInfo& info) const
= 0; |
| 41 | 41 |
| 42 virtual sk_sp<SkImage> onMakeTightSubset(const SkIRect& subset) const = 0; | 42 virtual sk_sp<SkImage> onMakeTightSubset(const SkIRect& subset) const = 0; |
| 43 | 43 |
| 44 virtual SkSurface* onMakeTightSurface(const SkImageInfo& info) const = 0; | 44 virtual sk_sp<SkSurface> onMakeTightSurface(const SkImageInfo& info) const =
0; |
| 45 | 45 |
| 46 private: | 46 private: |
| 47 typedef SkSpecialImage INHERITED; | 47 typedef SkSpecialImage INHERITED; |
| 48 }; | 48 }; |
| 49 | 49 |
| 50 /////////////////////////////////////////////////////////////////////////////// | 50 /////////////////////////////////////////////////////////////////////////////// |
| 51 static inline const SkSpecialImage_Base* as_SIB(const SkSpecialImage* image) { | 51 static inline const SkSpecialImage_Base* as_SIB(const SkSpecialImage* image) { |
| 52 return static_cast<const SkSpecialImage_Base*>(image); | 52 return static_cast<const SkSpecialImage_Base*>(image); |
| 53 } | 53 } |
| 54 | 54 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 | 98 |
| 99 bool SkSpecialImage::testingOnlyGetROPixels(SkBitmap* result) const { | 99 bool SkSpecialImage::testingOnlyGetROPixels(SkBitmap* result) const { |
| 100 return as_SIB(this)->testingOnlyOnGetROPixels(result); | 100 return as_SIB(this)->testingOnlyOnGetROPixels(result); |
| 101 } | 101 } |
| 102 | 102 |
| 103 sk_sp<SkSpecialSurface> SkSpecialImage::makeSurface(const SkImageInfo& info) con
st { | 103 sk_sp<SkSpecialSurface> SkSpecialImage::makeSurface(const SkImageInfo& info) con
st { |
| 104 return as_SIB(this)->onMakeSurface(info); | 104 return as_SIB(this)->onMakeSurface(info); |
| 105 } | 105 } |
| 106 | 106 |
| 107 sk_sp<SkSurface> SkSpecialImage::makeTightSurface(const SkImageInfo& info) const
{ | 107 sk_sp<SkSurface> SkSpecialImage::makeTightSurface(const SkImageInfo& info) const
{ |
| 108 sk_sp<SkSurface> tmp(as_SIB(this)->onMakeTightSurface(info)); | 108 return as_SIB(this)->onMakeTightSurface(info); |
| 109 return tmp; | |
| 110 } | 109 } |
| 111 | 110 |
| 112 sk_sp<SkSpecialImage> SkSpecialImage::makeSubset(const SkIRect& subset) const { | 111 sk_sp<SkSpecialImage> SkSpecialImage::makeSubset(const SkIRect& subset) const { |
| 113 return as_SIB(this)->onMakeSubset(subset); | 112 return as_SIB(this)->onMakeSubset(subset); |
| 114 } | 113 } |
| 115 | 114 |
| 116 sk_sp<SkImage> SkSpecialImage::makeTightSubset(const SkIRect& subset) const { | 115 sk_sp<SkImage> SkSpecialImage::makeTightSubset(const SkIRect& subset) const { |
| 117 return as_SIB(this)->onMakeTightSubset(subset); | 116 return as_SIB(this)->onMakeTightSubset(subset); |
| 118 } | 117 } |
| 119 | 118 |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 | 236 |
| 238 return SkSpecialImage::MakeFromImage(this->internal_getProxy(), | 237 return SkSpecialImage::MakeFromImage(this->internal_getProxy(), |
| 239 SkIRect::MakeWH(subset.width(), sub
set.height()), | 238 SkIRect::MakeWH(subset.width(), sub
set.height()), |
| 240 subsetImg); | 239 subsetImg); |
| 241 } | 240 } |
| 242 | 241 |
| 243 sk_sp<SkImage> onMakeTightSubset(const SkIRect& subset) const override { | 242 sk_sp<SkImage> onMakeTightSubset(const SkIRect& subset) const override { |
| 244 return fImage->makeSubset(subset); | 243 return fImage->makeSubset(subset); |
| 245 } | 244 } |
| 246 | 245 |
| 247 SkSurface* onMakeTightSurface(const SkImageInfo& info) const override { | 246 sk_sp<SkSurface> onMakeTightSurface(const SkImageInfo& info) const override
{ |
| 248 #if SK_SUPPORT_GPU | 247 #if SK_SUPPORT_GPU |
| 249 GrTexture* texture = as_IB(fImage.get())->peekTexture(); | 248 GrTexture* texture = as_IB(fImage.get())->peekTexture(); |
| 250 if (texture) { | 249 if (texture) { |
| 251 return SkSurface::NewRenderTarget(texture->getContext(), SkBudgeted:
:kYes, info, 0); | 250 return SkSurface::MakeRenderTarget(texture->getContext(), SkBudgeted
::kYes, info); |
| 252 } | 251 } |
| 253 #endif | 252 #endif |
| 254 return SkSurface::NewRaster(info, nullptr); | 253 return SkSurface::MakeRaster(info, nullptr); |
| 255 } | 254 } |
| 256 | 255 |
| 257 private: | 256 private: |
| 258 sk_sp<SkImage> fImage; | 257 sk_sp<SkImage> fImage; |
| 259 | 258 |
| 260 typedef SkSpecialImage_Base INHERITED; | 259 typedef SkSpecialImage_Base INHERITED; |
| 261 }; | 260 }; |
| 262 | 261 |
| 263 #ifdef SK_DEBUG | 262 #ifdef SK_DEBUG |
| 264 static bool rect_fits(const SkIRect& rect, int width, int height) { | 263 static bool rect_fits(const SkIRect& rect, int width, int height) { |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 362 sk_sp<SkImage> onMakeTightSubset(const SkIRect& subset) const override { | 361 sk_sp<SkImage> onMakeTightSubset(const SkIRect& subset) const override { |
| 363 SkBitmap subsetBM; | 362 SkBitmap subsetBM; |
| 364 | 363 |
| 365 if (!fBitmap.extractSubset(&subsetBM, subset)) { | 364 if (!fBitmap.extractSubset(&subsetBM, subset)) { |
| 366 return nullptr; | 365 return nullptr; |
| 367 } | 366 } |
| 368 | 367 |
| 369 return SkImage::MakeFromBitmap(subsetBM); | 368 return SkImage::MakeFromBitmap(subsetBM); |
| 370 } | 369 } |
| 371 | 370 |
| 372 SkSurface* onMakeTightSurface(const SkImageInfo& info) const override { | 371 sk_sp<SkSurface> onMakeTightSurface(const SkImageInfo& info) const override
{ |
| 373 return SkSurface::NewRaster(info); | 372 return SkSurface::MakeRaster(info); |
| 374 } | 373 } |
| 375 | 374 |
| 376 private: | 375 private: |
| 377 SkBitmap fBitmap; | 376 SkBitmap fBitmap; |
| 378 | 377 |
| 379 typedef SkSpecialImage_Base INHERITED; | 378 typedef SkSpecialImage_Base INHERITED; |
| 380 }; | 379 }; |
| 381 | 380 |
| 382 sk_sp<SkSpecialImage> SkSpecialImage::MakeFromRaster(SkImageFilter::Proxy* proxy
, | 381 sk_sp<SkSpecialImage> SkSpecialImage::MakeFromRaster(SkImageFilter::Proxy* proxy
, |
| 383 const SkIRect& subset, | 382 const SkIRect& subset, |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 SkAutoTUnref<GrTexture> subTx(ctx->textureProvider()->createTexture(desc
, | 504 SkAutoTUnref<GrTexture> subTx(ctx->textureProvider()->createTexture(desc
, |
| 506 SkBu
dgeted::kYes)); | 505 SkBu
dgeted::kYes)); |
| 507 if (!subTx) { | 506 if (!subTx) { |
| 508 return nullptr; | 507 return nullptr; |
| 509 } | 508 } |
| 510 ctx->copySurface(subTx, fTexture, subset, SkIPoint::Make(0, 0)); | 509 ctx->copySurface(subTx, fTexture, subset, SkIPoint::Make(0, 0)); |
| 511 return sk_make_sp<SkImage_Gpu>(desc.fWidth, desc.fHeight, kNeedNewImageU
niqueID, | 510 return sk_make_sp<SkImage_Gpu>(desc.fWidth, desc.fHeight, kNeedNewImageU
niqueID, |
| 512 fAlphaType, subTx, SkBudgeted::kYes); | 511 fAlphaType, subTx, SkBudgeted::kYes); |
| 513 } | 512 } |
| 514 | 513 |
| 515 SkSurface* onMakeTightSurface(const SkImageInfo& info) const override { | 514 sk_sp<SkSurface> onMakeTightSurface(const SkImageInfo& info) const override
{ |
| 516 return SkSurface::NewRenderTarget(fTexture->getContext(), SkBudgeted::kY
es, info); | 515 return SkSurface::MakeRenderTarget(fTexture->getContext(), SkBudgeted::k
Yes, info); |
| 517 } | 516 } |
| 518 | 517 |
| 519 private: | 518 private: |
| 520 SkAutoTUnref<GrTexture> fTexture; | 519 SkAutoTUnref<GrTexture> fTexture; |
| 521 const SkAlphaType fAlphaType; | 520 const SkAlphaType fAlphaType; |
| 522 | 521 |
| 523 typedef SkSpecialImage_Base INHERITED; | 522 typedef SkSpecialImage_Base INHERITED; |
| 524 }; | 523 }; |
| 525 | 524 |
| 526 sk_sp<SkSpecialImage> SkSpecialImage::MakeFromGpu(SkImageFilter::Proxy* proxy, | 525 sk_sp<SkSpecialImage> SkSpecialImage::MakeFromGpu(SkImageFilter::Proxy* proxy, |
| 527 const SkIRect& subset, | 526 const SkIRect& subset, |
| 528 uint32_t uniqueID, | 527 uint32_t uniqueID, |
| 529 GrTexture* tex, | 528 GrTexture* tex, |
| 530 SkAlphaType at) { | 529 SkAlphaType at) { |
| 531 SkASSERT(rect_fits(subset, tex->width(), tex->height())); | 530 SkASSERT(rect_fits(subset, tex->width(), tex->height())); |
| 532 return sk_make_sp<SkSpecialImage_Gpu>(proxy, subset, uniqueID, tex, at); | 531 return sk_make_sp<SkSpecialImage_Gpu>(proxy, subset, uniqueID, tex, at); |
| 533 } | 532 } |
| 534 | 533 |
| 535 #else | 534 #else |
| 536 | 535 |
| 537 sk_sp<SkSpecialImage> SkSpecialImage::MakeFromGpu(SkImageFilter::Proxy* proxy, | 536 sk_sp<SkSpecialImage> SkSpecialImage::MakeFromGpu(SkImageFilter::Proxy* proxy, |
| 538 const SkIRect& subset, | 537 const SkIRect& subset, |
| 539 uint32_t uniqueID, | 538 uint32_t uniqueID, |
| 540 GrTexture* tex, | 539 GrTexture* tex, |
| 541 SkAlphaType at) { | 540 SkAlphaType at) { |
| 542 return nullptr; | 541 return nullptr; |
| 543 } | 542 } |
| 544 | 543 |
| 545 #endif | 544 #endif |
| OLD | NEW |