Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(571)

Side by Side Diff: src/core/SkSpecialImage.cpp

Issue 1913743002: Add another dollop of sk_sp to SkSpecialImage and SkSpecialSurface (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rm std::move Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/core/SkSpecialImage.h ('k') | src/core/SkSpecialSurface.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 14 matching lines...) Expand all
25 : INHERITED(subset, uniqueID, props) { 25 : INHERITED(subset, uniqueID, props) {
26 } 26 }
27 ~SkSpecialImage_Base() override { } 27 ~SkSpecialImage_Base() override { }
28 28
29 virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y, const SkPaint*) const = 0; 29 virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y, const SkPaint*) const = 0;
30 30
31 virtual bool onGetROPixels(SkBitmap*) const = 0; 31 virtual bool onGetROPixels(SkBitmap*) const = 0;
32 32
33 virtual GrTexture* onPeekTexture() const { return nullptr; } 33 virtual GrTexture* onPeekTexture() const { return nullptr; }
34 34
35 virtual GrTexture* onAsTextureRef(GrContext* context) const = 0; 35 #if SK_SUPPORT_GPU
36 virtual sk_sp<GrTexture> onAsTextureRef(GrContext* context) const = 0;
37 #endif
36 38
37 // Delete this entry point ASAP (see skbug.com/4965) 39 // Delete this entry point ASAP (see skbug.com/4965)
38 virtual bool getBitmapDeprecated(SkBitmap* result) const = 0; 40 virtual bool getBitmapDeprecated(SkBitmap* result) const = 0;
39 41
40 virtual sk_sp<SkSpecialImage> onMakeSubset(const SkIRect& subset) const = 0; 42 virtual sk_sp<SkSpecialImage> onMakeSubset(const SkIRect& subset) const = 0;
41 43
42 virtual sk_sp<SkSpecialSurface> onMakeSurface(const SkImageInfo& info) const = 0; 44 virtual sk_sp<SkSpecialSurface> onMakeSurface(const SkImageInfo& info) const = 0;
43 45
44 virtual sk_sp<SkImage> onMakeTightSubset(const SkIRect& subset) const = 0; 46 virtual sk_sp<SkImage> onMakeTightSubset(const SkIRect& subset) const = 0;
45 47
(...skipping 27 matching lines...) Expand all
73 75
74 SkBitmap bmp; 76 SkBitmap bmp;
75 if (!this->internal_getBM(&bmp)) { 77 if (!this->internal_getBM(&bmp)) {
76 return nullptr; 78 return nullptr;
77 } 79 }
78 80
79 if (bmp.empty()) { 81 if (bmp.empty()) {
80 return SkSpecialImage::MakeFromRaster(SkIRect::MakeEmpty(), bmp, &this-> props()); 82 return SkSpecialImage::MakeFromRaster(SkIRect::MakeEmpty(), bmp, &this-> props());
81 } 83 }
82 84
83 SkAutoTUnref<GrTexture> resultTex( 85 sk_sp<GrTexture> resultTex(GrRefCachedBitmapTexture(context,
84 GrRefCachedBitmapTexture(context, bmp, GrTextureParams::ClampNoFilter()) ); 86 bmp,
87 GrTextureParams::ClampNo Filter()));
85 if (!resultTex) { 88 if (!resultTex) {
86 return nullptr; 89 return nullptr;
87 } 90 }
88 91
89 SkAlphaType at = this->isOpaque() ? kOpaque_SkAlphaType : kPremul_SkAlphaTyp e; 92 SkAlphaType at = this->isOpaque() ? kOpaque_SkAlphaType : kPremul_SkAlphaTyp e;
90 93
91 return SkSpecialImage::MakeFromGpu(SkIRect::MakeWH(resultTex->width(), resul tTex->height()), 94 return SkSpecialImage::MakeFromGpu(SkIRect::MakeWH(resultTex->width(), resul tTex->height()),
92 this->uniqueID(), 95 this->uniqueID(),
93 resultTex, &this->props(), at); 96 resultTex, &this->props(), at);
94 #else 97 #else
(...skipping 21 matching lines...) Expand all
116 #if SK_SUPPORT_GPU 119 #if SK_SUPPORT_GPU
117 GrTexture* texture = as_SIB(this)->onPeekTexture(); 120 GrTexture* texture = as_SIB(this)->onPeekTexture();
118 121
119 if (texture) { 122 if (texture) {
120 return texture->getContext(); 123 return texture->getContext();
121 } 124 }
122 #endif 125 #endif
123 return nullptr; 126 return nullptr;
124 } 127 }
125 128
126 129 #if SK_SUPPORT_GPU
127 GrTexture* SkSpecialImage::asTextureRef(GrContext* context) const { 130 sk_sp<GrTexture> SkSpecialImage::asTextureRef(GrContext* context) const {
128 return as_SIB(this)->onAsTextureRef(context); 131 return as_SIB(this)->onAsTextureRef(context);
129 } 132 }
133 #endif
130 134
131 sk_sp<SkSpecialSurface> SkSpecialImage::makeSurface(const SkImageInfo& info) con st { 135 sk_sp<SkSpecialSurface> SkSpecialImage::makeSurface(const SkImageInfo& info) con st {
132 return as_SIB(this)->onMakeSurface(info); 136 return as_SIB(this)->onMakeSurface(info);
133 } 137 }
134 138
135 sk_sp<SkSurface> SkSpecialImage::makeTightSurface(const SkImageInfo& info) const { 139 sk_sp<SkSurface> SkSpecialImage::makeTightSurface(const SkImageInfo& info) const {
136 return as_SIB(this)->onMakeTightSurface(info); 140 return as_SIB(this)->onMakeTightSurface(info);
137 } 141 }
138 142
139 sk_sp<SkSpecialImage> SkSpecialImage::makeSubset(const SkIRect& subset) const { 143 sk_sp<SkSpecialImage> SkSpecialImage::makeSubset(const SkIRect& subset) const {
140 return as_SIB(this)->onMakeSubset(subset); 144 return as_SIB(this)->onMakeSubset(subset);
141 } 145 }
142 146
143 sk_sp<SkImage> SkSpecialImage::makeTightSubset(const SkIRect& subset) const { 147 sk_sp<SkImage> SkSpecialImage::makeTightSubset(const SkIRect& subset) const {
144 return as_SIB(this)->onMakeTightSubset(subset); 148 return as_SIB(this)->onMakeTightSubset(subset);
145 } 149 }
146 150
147 #if SK_SUPPORT_GPU 151 #if SK_SUPPORT_GPU
148 #include "SkGr.h" 152 #include "SkGr.h"
149 #include "SkGrPixelRef.h" 153 #include "SkGrPixelRef.h"
150 #endif 154 #endif
151 155
152 sk_sp<SkSpecialImage> SkSpecialImage::internal_fromBM(const SkBitmap& src, 156 sk_sp<SkSpecialImage> SkSpecialImage::internal_fromBM(const SkBitmap& src,
153 const SkSurfaceProps* prop s) { 157 const SkSurfaceProps* prop s) {
158 #if SK_SUPPORT_GPU
154 // Need to test offset case! (see skbug.com/4967) 159 // Need to test offset case! (see skbug.com/4967)
155 if (src.getTexture()) { 160 if (src.getTexture()) {
156 return SkSpecialImage::MakeFromGpu(src.bounds(), 161 return SkSpecialImage::MakeFromGpu(src.bounds(),
157 src.getGenerationID(), 162 src.getGenerationID(),
158 src.getTexture(), 163 sk_ref_sp(src.getTexture()),
159 props); 164 props);
160 } 165 }
166 #endif
161 167
162 return SkSpecialImage::MakeFromRaster(src.bounds(), src, props); 168 return SkSpecialImage::MakeFromRaster(src.bounds(), src, props);
163 } 169 }
164 170
165 bool SkSpecialImage::internal_getBM(SkBitmap* result) { 171 bool SkSpecialImage::internal_getBM(SkBitmap* result) {
166 const SkSpecialImage_Base* ib = as_SIB(this); 172 const SkSpecialImage_Base* ib = as_SIB(this);
167 173
168 // TODO: need to test offset case! (see skbug.com/4967) 174 // TODO: need to test offset case! (see skbug.com/4967)
169 return ib->getBitmapDeprecated(result); 175 return ib->getBitmapDeprecated(result);
170 } 176 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 canvas->drawImageRect(fImage.get(), this->subset(), 216 canvas->drawImageRect(fImage.get(), this->subset(),
211 dst, paint, SkCanvas::kStrict_SrcRectConstraint); 217 dst, paint, SkCanvas::kStrict_SrcRectConstraint);
212 } 218 }
213 219
214 bool onGetROPixels(SkBitmap* bm) const override { 220 bool onGetROPixels(SkBitmap* bm) const override {
215 return as_IB(fImage)->getROPixels(bm); 221 return as_IB(fImage)->getROPixels(bm);
216 } 222 }
217 223
218 GrTexture* onPeekTexture() const override { return as_IB(fImage)->peekTextur e(); } 224 GrTexture* onPeekTexture() const override { return as_IB(fImage)->peekTextur e(); }
219 225
220 GrTexture* onAsTextureRef(GrContext* context) const override {
221 #if SK_SUPPORT_GPU 226 #if SK_SUPPORT_GPU
222 return as_IB(fImage)->asTextureRef(context, GrTextureParams::ClampNoFilt er()); 227 sk_sp<GrTexture> onAsTextureRef(GrContext* context) const override {
223 #else 228 return sk_sp<GrTexture>(as_IB(fImage)->asTextureRef(context,
224 return nullptr; 229 GrTextureParams::Cla mpNoFilter()));
230 }
225 #endif 231 #endif
226 }
227 232
228 bool getBitmapDeprecated(SkBitmap* result) const override { 233 bool getBitmapDeprecated(SkBitmap* result) const override {
229 #if SK_SUPPORT_GPU 234 #if SK_SUPPORT_GPU
230 if (GrTexture* texture = as_IB(fImage.get())->peekTexture()) { 235 if (GrTexture* texture = as_IB(fImage.get())->peekTexture()) {
231 const SkImageInfo info = GrMakeInfoFromTexture(texture, 236 const SkImageInfo info = GrMakeInfoFromTexture(texture,
232 fImage->width(), fIma ge->height(), 237 fImage->width(), fIma ge->height(),
233 fImage->isOpaque()); 238 fImage->isOpaque());
234 if (!result->setInfo(info)) { 239 if (!result->setInfo(info)) {
235 return false; 240 return false;
236 } 241 }
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 354
350 canvas->drawBitmapRect(fBitmap, this->subset(), 355 canvas->drawBitmapRect(fBitmap, this->subset(),
351 dst, paint, SkCanvas::kStrict_SrcRectConstraint); 356 dst, paint, SkCanvas::kStrict_SrcRectConstraint);
352 } 357 }
353 358
354 bool onGetROPixels(SkBitmap* bm) const override { 359 bool onGetROPixels(SkBitmap* bm) const override {
355 *bm = fBitmap; 360 *bm = fBitmap;
356 return true; 361 return true;
357 } 362 }
358 363
359 GrTexture* onAsTextureRef(GrContext* context) const override {
360 #if SK_SUPPORT_GPU 364 #if SK_SUPPORT_GPU
365 sk_sp<GrTexture> onAsTextureRef(GrContext* context) const override {
361 if (context) { 366 if (context) {
362 return GrRefCachedBitmapTexture(context, fBitmap, GrTextureParams::C lampNoFilter()); 367 return sk_ref_sp(GrRefCachedBitmapTexture(context,
368 fBitmap,
369 GrTextureParams::ClampNoFi lter()));
363 } 370 }
364 #endif
365 371
366 return nullptr; 372 return nullptr;
367 } 373 }
374 #endif
368 375
369 bool getBitmapDeprecated(SkBitmap* result) const override { 376 bool getBitmapDeprecated(SkBitmap* result) const override {
370 *result = fBitmap; 377 *result = fBitmap;
371 return true; 378 return true;
372 } 379 }
373 380
374 sk_sp<SkSpecialSurface> onMakeSurface(const SkImageInfo& info) const overrid e { 381 sk_sp<SkSpecialSurface> onMakeSurface(const SkImageInfo& info) const overrid e {
375 return SkSpecialSurface::MakeRaster(info, nullptr); 382 return SkSpecialSurface::MakeRaster(info, nullptr);
376 } 383 }
377 384
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 437
431 438
432 #if SK_SUPPORT_GPU 439 #if SK_SUPPORT_GPU
433 /////////////////////////////////////////////////////////////////////////////// 440 ///////////////////////////////////////////////////////////////////////////////
434 #include "GrTexture.h" 441 #include "GrTexture.h"
435 #include "SkImage_Gpu.h" 442 #include "SkImage_Gpu.h"
436 443
437 class SkSpecialImage_Gpu : public SkSpecialImage_Base { 444 class SkSpecialImage_Gpu : public SkSpecialImage_Base {
438 public: 445 public:
439 SkSpecialImage_Gpu(const SkIRect& subset, 446 SkSpecialImage_Gpu(const SkIRect& subset,
440 uint32_t uniqueID, GrTexture* tex, SkAlphaType at, 447 uint32_t uniqueID, sk_sp<GrTexture> tex, SkAlphaType at,
441 const SkSurfaceProps* props) 448 const SkSurfaceProps* props)
442 : INHERITED(subset, uniqueID, props) 449 : INHERITED(subset, uniqueID, props)
443 , fTexture(SkRef(tex)) 450 , fTexture(std::move(tex))
444 , fAlphaType(at) 451 , fAlphaType(at)
445 , fAddedRasterVersionToCache(false) { 452 , fAddedRasterVersionToCache(false) {
446 } 453 }
447 454
448 ~SkSpecialImage_Gpu() override { 455 ~SkSpecialImage_Gpu() override {
449 if (fAddedRasterVersionToCache.load()) { 456 if (fAddedRasterVersionToCache.load()) {
450 SkNotifyBitmapGenIDIsStale(this->uniqueID()); 457 SkNotifyBitmapGenIDIsStale(this->uniqueID());
451 } 458 }
452 } 459 }
453 460
454 bool isOpaque() const override { 461 bool isOpaque() const override {
455 return GrPixelConfigIsOpaque(fTexture->config()) || fAlphaType == kOpaqu e_SkAlphaType; 462 return GrPixelConfigIsOpaque(fTexture->config()) || fAlphaType == kOpaqu e_SkAlphaType;
456 } 463 }
457 464
458 size_t getSize() const override { return fTexture->gpuMemorySize(); } 465 size_t getSize() const override { return fTexture->gpuMemorySize(); }
459 466
460 void onDraw(SkCanvas* canvas, SkScalar x, SkScalar y, const SkPaint* paint) const override { 467 void onDraw(SkCanvas* canvas, SkScalar x, SkScalar y, const SkPaint* paint) const override {
461 SkRect dst = SkRect::MakeXYWH(x, y, 468 SkRect dst = SkRect::MakeXYWH(x, y,
462 this->subset().width(), this->subset().hei ght()); 469 this->subset().width(), this->subset().hei ght());
463 470
464 SkBitmap bm; 471 SkBitmap bm;
465 472
466 GrWrapTextureInBitmap(fTexture, 473 GrWrapTextureInBitmap(fTexture.get(),
467 fTexture->width(), fTexture->height(), this->isOpa que(), &bm); 474 fTexture->width(), fTexture->height(), this->isOpa que(), &bm);
468 475
469 canvas->drawBitmapRect(bm, this->subset(), 476 canvas->drawBitmapRect(bm, this->subset(),
470 dst, paint, SkCanvas::kStrict_SrcRectConstraint); 477 dst, paint, SkCanvas::kStrict_SrcRectConstraint);
471 } 478 }
472 479
473 GrTexture* onPeekTexture() const override { return fTexture; } 480 GrTexture* onPeekTexture() const override { return fTexture.get(); }
474 481
475 GrTexture* onAsTextureRef(GrContext*) const override { return SkRef(fTexture .get()); } 482 sk_sp<GrTexture> onAsTextureRef(GrContext*) const override { return fTexture ; }
476 483
477 bool onGetROPixels(SkBitmap* dst) const override { 484 bool onGetROPixels(SkBitmap* dst) const override {
478 if (SkBitmapCache::Find(this->uniqueID(), dst)) { 485 if (SkBitmapCache::Find(this->uniqueID(), dst)) {
479 SkASSERT(dst->getGenerationID() == this->uniqueID()); 486 SkASSERT(dst->getGenerationID() == this->uniqueID());
480 SkASSERT(dst->isImmutable()); 487 SkASSERT(dst->isImmutable());
481 SkASSERT(dst->getPixels()); 488 SkASSERT(dst->getPixels());
482 return true; 489 return true;
483 } 490 }
484 491
485 SkImageInfo info = SkImageInfo::MakeN32(this->width(), this->height(), 492 SkImageInfo info = SkImageInfo::MakeN32(this->width(), this->height(),
486 this->isOpaque() ? kOpaque_SkAlp haType 493 this->isOpaque() ? kOpaque_SkAlp haType
487 : kPremul_SkAlp haType); 494 : kPremul_SkAlp haType);
488 495
489 if (!dst->tryAllocPixels(info)) { 496 if (!dst->tryAllocPixels(info)) {
490 return false; 497 return false;
491 } 498 }
492 499
493 if (!fTexture->readPixels(0, 0, dst->width(), dst->height(), kSkia8888_G rPixelConfig, 500 if (!fTexture->readPixels(0, 0, dst->width(), dst->height(), kSkia8888_G rPixelConfig,
494 dst->getPixels(), dst->rowBytes())) { 501 dst->getPixels(), dst->rowBytes())) {
495 return false; 502 return false;
496 } 503 }
497 504
498 dst->pixelRef()->setImmutableWithID(this->uniqueID()); 505 dst->pixelRef()->setImmutableWithID(this->uniqueID());
499 SkBitmapCache::Add(this->uniqueID(), *dst); 506 SkBitmapCache::Add(this->uniqueID(), *dst);
500 fAddedRasterVersionToCache.store(true); 507 fAddedRasterVersionToCache.store(true);
501 return true; 508 return true;
502 } 509 }
503 510
504 bool getBitmapDeprecated(SkBitmap* result) const override { 511 bool getBitmapDeprecated(SkBitmap* result) const override {
505 const SkImageInfo info = GrMakeInfoFromTexture(fTexture, 512 const SkImageInfo info = GrMakeInfoFromTexture(fTexture.get(),
506 this->width(), this->heig ht(), 513 this->width(), this->heig ht(),
507 this->isOpaque()); 514 this->isOpaque());
508 if (!result->setInfo(info)) { 515 if (!result->setInfo(info)) {
509 return false; 516 return false;
510 } 517 }
511 518
512 const SkImageInfo prInfo = info.makeWH(fTexture->width(), fTexture->heig ht()); 519 const SkImageInfo prInfo = info.makeWH(fTexture->width(), fTexture->heig ht());
513 520
514 SkAutoTUnref<SkGrPixelRef> pixelRef(new SkGrPixelRef(prInfo, fTexture)); 521 SkAutoTUnref<SkGrPixelRef> pixelRef(new SkGrPixelRef(prInfo, fTexture.ge t()));
515 result->setPixelRef(pixelRef, this->subset().fLeft, this->subset().fTop) ; 522 result->setPixelRef(pixelRef, this->subset().fLeft, this->subset().fTop) ;
516 return true; 523 return true;
517 } 524 }
518 525
519 sk_sp<SkSpecialSurface> onMakeSurface(const SkImageInfo& info) const overrid e { 526 sk_sp<SkSpecialSurface> onMakeSurface(const SkImageInfo& info) const overrid e {
520 if (!fTexture->getContext()) { 527 if (!fTexture->getContext()) {
521 return nullptr; 528 return nullptr;
522 } 529 }
523 530
524 GrSurfaceDesc desc = GrImageInfoToSurfaceDesc(info, *fTexture->getContex t()->caps()); 531 GrSurfaceDesc desc = GrImageInfoToSurfaceDesc(info, *fTexture->getContex t()->caps());
(...skipping 10 matching lines...) Expand all
535 fAlphaType); 542 fAlphaType);
536 } 543 }
537 544
538 sk_sp<SkImage> onMakeTightSubset(const SkIRect& subset) const override { 545 sk_sp<SkImage> onMakeTightSubset(const SkIRect& subset) const override {
539 if (0 == subset.fLeft && 0 == subset.fTop && 546 if (0 == subset.fLeft && 0 == subset.fTop &&
540 fTexture->width() == subset.width() && 547 fTexture->width() == subset.width() &&
541 fTexture->height() == subset.height()) { 548 fTexture->height() == subset.height()) {
542 // The existing GrTexture is already tight so reuse it in the SkImag e 549 // The existing GrTexture is already tight so reuse it in the SkImag e
543 return sk_make_sp<SkImage_Gpu>(fTexture->width(), fTexture->height() , 550 return sk_make_sp<SkImage_Gpu>(fTexture->width(), fTexture->height() ,
544 kNeedNewImageUniqueID, 551 kNeedNewImageUniqueID,
545 fAlphaType, fTexture, SkBudgeted::kYe s); 552 fAlphaType, fTexture.get(), SkBudgete d::kYes);
546 } 553 }
547 554
548 GrContext* ctx = fTexture->getContext(); 555 GrContext* ctx = fTexture->getContext();
549 GrSurfaceDesc desc = fTexture->desc(); 556 GrSurfaceDesc desc = fTexture->desc();
550 desc.fWidth = subset.width(); 557 desc.fWidth = subset.width();
551 desc.fHeight = subset.height(); 558 desc.fHeight = subset.height();
552 559
553 SkAutoTUnref<GrTexture> subTx(ctx->textureProvider()->createTexture(desc , 560 sk_sp<GrTexture> subTx(ctx->textureProvider()->createTexture(desc, SkBud geted::kYes));
554 SkBu dgeted::kYes));
555 if (!subTx) { 561 if (!subTx) {
556 return nullptr; 562 return nullptr;
557 } 563 }
558 ctx->copySurface(subTx, fTexture, subset, SkIPoint::Make(0, 0)); 564 ctx->copySurface(subTx.get(), fTexture.get(), subset, SkIPoint::Make(0, 0));
559 return sk_make_sp<SkImage_Gpu>(desc.fWidth, desc.fHeight, kNeedNewImageU niqueID, 565 return sk_make_sp<SkImage_Gpu>(desc.fWidth, desc.fHeight, kNeedNewImageU niqueID,
560 fAlphaType, subTx, SkBudgeted::kYes); 566 fAlphaType, subTx.get(), SkBudgeted::kYes );
561 } 567 }
562 568
563 sk_sp<SkSurface> onMakeTightSurface(const SkImageInfo& info) const override { 569 sk_sp<SkSurface> onMakeTightSurface(const SkImageInfo& info) const override {
564 return SkSurface::MakeRenderTarget(fTexture->getContext(), SkBudgeted::k Yes, info); 570 return SkSurface::MakeRenderTarget(fTexture->getContext(), SkBudgeted::k Yes, info);
565 } 571 }
566 572
567 private: 573 private:
568 SkAutoTUnref<GrTexture> fTexture; 574 sk_sp<GrTexture> fTexture;
569 const SkAlphaType fAlphaType; 575 const SkAlphaType fAlphaType;
570 mutable SkAtomic<bool> fAddedRasterVersionToCache; 576 mutable SkAtomic<bool> fAddedRasterVersionToCache;
571 577
572 typedef SkSpecialImage_Base INHERITED; 578 typedef SkSpecialImage_Base INHERITED;
573 }; 579 };
574 580
575 sk_sp<SkSpecialImage> SkSpecialImage::MakeFromGpu(const SkIRect& subset, 581 sk_sp<SkSpecialImage> SkSpecialImage::MakeFromGpu(const SkIRect& subset,
576 uint32_t uniqueID, 582 uint32_t uniqueID,
577 GrTexture* tex, 583 sk_sp<GrTexture> tex,
578 const SkSurfaceProps* props, 584 const SkSurfaceProps* props,
579 SkAlphaType at) { 585 SkAlphaType at) {
580 SkASSERT(rect_fits(subset, tex->width(), tex->height())); 586 SkASSERT(rect_fits(subset, tex->width(), tex->height()));
581 return sk_make_sp<SkSpecialImage_Gpu>(subset, uniqueID, tex, at, props); 587 return sk_make_sp<SkSpecialImage_Gpu>(subset, uniqueID, std::move(tex), at, props);
582 }
583
584 #else
585
586 sk_sp<SkSpecialImage> SkSpecialImage::MakeFromGpu(const SkIRect& subset,
587 uint32_t uniqueID,
588 GrTexture* tex,
589 const SkSurfaceProps* props,
590 SkAlphaType at) {
591 return nullptr;
592 } 588 }
593 589
594 #endif 590 #endif
OLDNEW
« no previous file with comments | « src/core/SkSpecialImage.h ('k') | src/core/SkSpecialSurface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698