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 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 return create_image_from_maker(&maker, at, this->uniqueID()); | 325 return create_image_from_maker(&maker, at, this->uniqueID()); |
326 } | 326 } |
327 SkBitmap bmp; | 327 SkBitmap bmp; |
328 if (!this->asLegacyBitmap(&bmp, kRO_LegacyBitmapMode)) { | 328 if (!this->asLegacyBitmap(&bmp, kRO_LegacyBitmapMode)) { |
329 return nullptr; | 329 return nullptr; |
330 } | 330 } |
331 GrBitmapTextureMaker maker(context, bmp); | 331 GrBitmapTextureMaker maker(context, bmp); |
332 return create_image_from_maker(&maker, at, this->uniqueID()); | 332 return create_image_from_maker(&maker, at, this->uniqueID()); |
333 } | 333 } |
334 | 334 |
| 335 sk_sp<SkImage> SkImage::makeNonTextureImage() const { |
| 336 GrTexture* texture = as_IB(this)->peekTexture(); |
| 337 if (!texture) { |
| 338 return sk_ref_sp(const_cast<SkImage*>(this)); |
| 339 } |
| 340 SkColorType ct; |
| 341 sk_sp<SkColorSpace> cs; |
| 342 if (!GrPixelConfigToColorAndColorSpace(texture->config(), &ct, &cs)) { |
| 343 return nullptr; |
| 344 } |
| 345 SkAlphaType at = this->isOpaque() ? kOpaque_SkAlphaType : kPremul_SkAlphaTyp
e; |
| 346 auto info = SkImageInfo::Make(this->width(), this->height(), ct, at, cs); |
| 347 size_t rowBytes = info.minRowBytes(); |
| 348 size_t size = info.getSafeSize(rowBytes); |
| 349 auto data = SkData::MakeUninitialized(size); |
| 350 if (!data) { |
| 351 return nullptr; |
| 352 } |
| 353 SkPixmap pm(info, data->writable_data(), rowBytes); |
| 354 if (!this->readPixels(pm, 0, 0, kDisallow_CachingHint)) { |
| 355 return nullptr; |
| 356 } |
| 357 return MakeRasterData(info, data, rowBytes); |
| 358 } |
| 359 |
335 sk_sp<SkImage> SkImage::MakeTextureFromPixmap(GrContext* ctx, const SkPixmap& pi
xmap, | 360 sk_sp<SkImage> SkImage::MakeTextureFromPixmap(GrContext* ctx, const SkPixmap& pi
xmap, |
336 SkBudgeted budgeted) { | 361 SkBudgeted budgeted) { |
337 if (!ctx) { | 362 if (!ctx) { |
338 return nullptr; | 363 return nullptr; |
339 } | 364 } |
340 SkAutoTUnref<GrTexture> texture(GrUploadPixmapToTexture(ctx, pixmap, budgete
d)); | 365 SkAutoTUnref<GrTexture> texture(GrUploadPixmapToTexture(ctx, pixmap, budgete
d)); |
341 if (!texture) { | 366 if (!texture) { |
342 return nullptr; | 367 return nullptr; |
343 } | 368 } |
344 return sk_make_sp<SkImage_Gpu>(texture->width(), texture->height(), kNeedNew
ImageUniqueID, | 369 return sk_make_sp<SkImage_Gpu>(texture->width(), texture->height(), kNeedNew
ImageUniqueID, |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
535 if (!ctx) { | 560 if (!ctx) { |
536 return nullptr; | 561 return nullptr; |
537 } | 562 } |
538 SkAutoTUnref<GrTexture> texture(GrUploadMipMapToTexture(ctx, info, texels, m
ipLevelCount)); | 563 SkAutoTUnref<GrTexture> texture(GrUploadMipMapToTexture(ctx, info, texels, m
ipLevelCount)); |
539 if (!texture) { | 564 if (!texture) { |
540 return nullptr; | 565 return nullptr; |
541 } | 566 } |
542 return sk_make_sp<SkImage_Gpu>(texture->width(), texture->height(), kNeedNew
ImageUniqueID, | 567 return sk_make_sp<SkImage_Gpu>(texture->width(), texture->height(), kNeedNew
ImageUniqueID, |
543 info.alphaType(), texture, budgeted); | 568 info.alphaType(), texture, budgeted); |
544 } | 569 } |
OLD | NEW |