| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 "SkBitmap.h" | 8 #include "SkBitmap.h" |
| 9 #include "SkBitmapCache.h" | 9 #include "SkBitmapCache.h" |
| 10 #include "SkImageCacherator.h" | 10 #include "SkImageCacherator.h" |
| 11 #include "SkMallocPixelRef.h" | 11 #include "SkMallocPixelRef.h" |
| 12 #include "SkNextID.h" | 12 #include "SkNextID.h" |
| 13 #include "SkPixelRef.h" | 13 #include "SkPixelRef.h" |
| 14 #include "SkResourceCache.h" |
| 14 | 15 |
| 15 #if SK_SUPPORT_GPU | 16 #if SK_SUPPORT_GPU |
| 16 #include "GrContext.h" | 17 #include "GrContext.h" |
| 17 #include "GrGpuResourcePriv.h" | 18 #include "GrGpuResourcePriv.h" |
| 18 #include "GrResourceKey.h" | 19 #include "GrResourceKey.h" |
| 19 #include "GrTextureAccess.h" | 20 #include "GrTextureAccess.h" |
| 20 #include "GrYUVProvider.h" | 21 #include "GrYUVProvider.h" |
| 21 #include "SkGr.h" | 22 #include "SkGr.h" |
| 22 #include "SkGrPriv.h" | 23 #include "SkGrPriv.h" |
| 23 #endif | 24 #endif |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 SkASSERT(bitmap.getGenerationID() == expectedID); | 76 SkASSERT(bitmap.getGenerationID() == expectedID); |
| 76 SkASSERT(bitmap.isImmutable()); | 77 SkASSERT(bitmap.isImmutable()); |
| 77 SkASSERT(bitmap.getPixels()); | 78 SkASSERT(bitmap.getPixels()); |
| 78 return true; | 79 return true; |
| 79 } | 80 } |
| 80 | 81 |
| 81 // Note, this returns a new, mutable, bitmap, with a new genID. | 82 // Note, this returns a new, mutable, bitmap, with a new genID. |
| 82 // If you want the immutable bitmap with the same ID as our cacherator, call try
LockAsBitmap() | 83 // If you want the immutable bitmap with the same ID as our cacherator, call try
LockAsBitmap() |
| 83 // | 84 // |
| 84 bool SkImageCacherator::generateBitmap(SkBitmap* bitmap) { | 85 bool SkImageCacherator::generateBitmap(SkBitmap* bitmap) { |
| 86 SkBitmap::Allocator* allocator = SkResourceCache::GetAllocator(); |
| 87 |
| 85 ScopedGenerator generator(this); | 88 ScopedGenerator generator(this); |
| 86 const SkImageInfo& genInfo = generator->getInfo(); | 89 const SkImageInfo& genInfo = generator->getInfo(); |
| 87 if (fInfo.dimensions() == genInfo.dimensions()) { | 90 if (fInfo.dimensions() == genInfo.dimensions()) { |
| 88 SkASSERT(fOrigin.x() == 0 && fOrigin.y() == 0); | 91 SkASSERT(fOrigin.x() == 0 && fOrigin.y() == 0); |
| 89 // fast-case, no copy needed | 92 // fast-case, no copy needed |
| 90 return generator->tryGenerateBitmap(bitmap, fInfo); | 93 return generator->tryGenerateBitmap(bitmap, fInfo, allocator); |
| 91 } else { | 94 } else { |
| 92 // need to handle subsetting, so we first generate the full size version
, and then | 95 // need to handle subsetting, so we first generate the full size version
, and then |
| 93 // "read" from it to get our subset. See skbug.com/4213 | 96 // "read" from it to get our subset. See skbug.com/4213 |
| 94 | 97 |
| 95 SkBitmap full; | 98 SkBitmap full; |
| 96 if (!generator->tryGenerateBitmap(&full, genInfo)) { | 99 if (!generator->tryGenerateBitmap(&full, genInfo, allocator)) { |
| 97 return false; | 100 return false; |
| 98 } | 101 } |
| 99 if (!bitmap->tryAllocPixels(fInfo, nullptr, full.getColorTable())) { | 102 if (!bitmap->tryAllocPixels(fInfo, nullptr, full.getColorTable())) { |
| 100 return false; | 103 return false; |
| 101 } | 104 } |
| 102 return full.readPixels(bitmap->info(), bitmap->getPixels(), bitmap->rowB
ytes(), | 105 return full.readPixels(bitmap->info(), bitmap->getPixels(), bitmap->rowB
ytes(), |
| 103 fOrigin.x(), fOrigin.y()); | 106 fOrigin.x(), fOrigin.y()); |
| 104 } | 107 } |
| 105 } | 108 } |
| 106 | 109 |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 // 5. Ask the generator to return RGB(A) data, which the GPU can convert | 263 // 5. Ask the generator to return RGB(A) data, which the GPU can convert |
| 261 SkBitmap bitmap; | 264 SkBitmap bitmap; |
| 262 if (this->tryLockAsBitmap(&bitmap)) { | 265 if (this->tryLockAsBitmap(&bitmap)) { |
| 263 return GrRefCachedBitmapTexture(ctx, bitmap, usage); | 266 return GrRefCachedBitmapTexture(ctx, bitmap, usage); |
| 264 } | 267 } |
| 265 #endif | 268 #endif |
| 266 | 269 |
| 267 return nullptr; | 270 return nullptr; |
| 268 } | 271 } |
| 269 | 272 |
| OLD | NEW |