OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "GrTextureStripAtlas.h" | 9 #include "GrTextureStripAtlas.h" |
10 #include "SkPixelRef.h" | 10 #include "SkPixelRef.h" |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 } | 85 } |
86 | 86 |
87 GrTextureStripAtlas::~GrTextureStripAtlas() { | 87 GrTextureStripAtlas::~GrTextureStripAtlas() { |
88 SkDELETE_ARRAY(fRows); | 88 SkDELETE_ARRAY(fRows); |
89 } | 89 } |
90 | 90 |
91 int GrTextureStripAtlas::lockRow(const SkBitmap& data) { | 91 int GrTextureStripAtlas::lockRow(const SkBitmap& data) { |
92 VALIDATE; | 92 VALIDATE; |
93 if (0 == fLockedRows) { | 93 if (0 == fLockedRows) { |
94 this->lockTexture(); | 94 this->lockTexture(); |
| 95 if (!fTexture) { |
| 96 return -1; |
| 97 } |
95 } | 98 } |
96 | 99 |
97 int key = data.getGenerationID(); | 100 int key = data.getGenerationID(); |
98 int rowNumber = -1; | 101 int rowNumber = -1; |
99 int index = this->searchByKey(key); | 102 int index = this->searchByKey(key); |
100 | 103 |
101 if (index >= 0) { | 104 if (index >= 0) { |
102 // We already have the data in a row, so we can just return that row | 105 // We already have the data in a row, so we can just return that row |
103 AtlasRow* row = fKeyTable[index]; | 106 AtlasRow* row = fKeyTable[index]; |
104 if (0 == row->fLocks) { | 107 if (0 == row->fLocks) { |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 | 200 |
198 static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain(); | 201 static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain(); |
199 GrUniqueKey key; | 202 GrUniqueKey key; |
200 GrUniqueKey::Builder builder(&key, kDomain, 1); | 203 GrUniqueKey::Builder builder(&key, kDomain, 1); |
201 builder[0] = static_cast<uint32_t>(fCacheKey); | 204 builder[0] = static_cast<uint32_t>(fCacheKey); |
202 builder.finish(); | 205 builder.finish(); |
203 | 206 |
204 fTexture = fDesc.fContext->findAndRefCachedTexture(key); | 207 fTexture = fDesc.fContext->findAndRefCachedTexture(key); |
205 if (NULL == fTexture) { | 208 if (NULL == fTexture) { |
206 fTexture = fDesc.fContext->createTexture(texDesc, true, NULL, 0); | 209 fTexture = fDesc.fContext->createTexture(texDesc, true, NULL, 0); |
| 210 if (!fTexture) { |
| 211 return; |
| 212 } |
207 fDesc.fContext->addResourceToCache(key, fTexture); | 213 fDesc.fContext->addResourceToCache(key, fTexture); |
208 // This is a new texture, so all of our cache info is now invalid | 214 // This is a new texture, so all of our cache info is now invalid |
209 this->initLRU(); | 215 this->initLRU(); |
210 fKeyTable.rewind(); | 216 fKeyTable.rewind(); |
211 } | 217 } |
212 SkASSERT(fTexture); | 218 SkASSERT(fTexture); |
213 } | 219 } |
214 | 220 |
215 void GrTextureStripAtlas::unlockTexture() { | 221 void GrTextureStripAtlas::unlockTexture() { |
216 SkASSERT(fTexture && 0 == fLockedRows); | 222 SkASSERT(fTexture && 0 == fLockedRows); |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 | 344 |
339 // If we have locked rows, we should have a locked texture, otherwise | 345 // If we have locked rows, we should have a locked texture, otherwise |
340 // it should be unlocked | 346 // it should be unlocked |
341 if (fLockedRows == 0) { | 347 if (fLockedRows == 0) { |
342 SkASSERT(NULL == fTexture); | 348 SkASSERT(NULL == fTexture); |
343 } else { | 349 } else { |
344 SkASSERT(fTexture); | 350 SkASSERT(fTexture); |
345 } | 351 } |
346 } | 352 } |
347 #endif | 353 #endif |
OLD | NEW |