| Index: src/gpu/SkGr.cpp
|
| diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
|
| index 9dc215c735d5e243a5ec981a02ebb23954031eb5..4b771aa30ab6e3f054f28d0b4c5eadefea6615e3 100644
|
| --- a/src/gpu/SkGr.cpp
|
| +++ b/src/gpu/SkGr.cpp
|
| @@ -9,6 +9,7 @@
|
| #include "SkColorFilter.h"
|
| #include "SkConfig8888.h"
|
| #include "SkData.h"
|
| +#include "SkKTXFile.h"
|
| #include "SkMessageBus.h"
|
| #include "SkPixelRef.h"
|
| #include "GrResourceCache.h"
|
| @@ -144,24 +145,40 @@ static GrTexture *load_etc1_texture(GrContext* ctx,
|
|
|
| // Is this a valid PKM encoded data?
|
| const uint8_t *bytes = data->bytes();
|
| - if (!etc1_pkm_is_valid(bytes)) {
|
| - return NULL;
|
| - }
|
| + if (etc1_pkm_is_valid(bytes)) {
|
| + uint32_t encodedWidth = etc1_pkm_get_width(bytes);
|
| + uint32_t encodedHeight = etc1_pkm_get_height(bytes);
|
| +
|
| + // Does the data match the dimensions of the bitmap? If not,
|
| + // then we don't know how to scale the image to match it...
|
| + if (encodedWidth != static_cast<uint32_t>(bm.width()) ||
|
| + encodedHeight != static_cast<uint32_t>(bm.height())) {
|
| + return NULL;
|
| + }
|
| +
|
| + // Everything seems good... skip ahead to the data.
|
| + bytes += ETC_PKM_HEADER_SIZE;
|
| + desc.fConfig = kETC1_GrPixelConfig;
|
| + } else if (SkKTXFile::is_ktx(bytes)) {
|
| + SkKTXFile ktx(bytes, data->size());
|
|
|
| - uint32_t encodedWidth = etc1_pkm_get_width(bytes);
|
| - uint32_t encodedHeight = etc1_pkm_get_height(bytes);
|
| + // Is it actually an ETC1 texture?
|
| + if (!ktx.isETC1()) {
|
| + return NULL;
|
| + }
|
| +
|
| + // Does the data match the dimensions of the bitmap? If not,
|
| + // then we don't know how to scale the image to match it...
|
| + if (ktx.width() != bm.width() || ktx.height() != bm.height()) {
|
| + return NULL;
|
| + }
|
|
|
| - // Does the data match the dimensions of the bitmap? If not,
|
| - // then we don't know how to scale the image to match it...
|
| - if (encodedWidth != static_cast<uint32_t>(bm.width()) ||
|
| - encodedHeight != static_cast<uint32_t>(bm.height())) {
|
| + bytes = ktx.pixelData();
|
| + desc.fConfig = kETC1_GrPixelConfig;
|
| + } else {
|
| return NULL;
|
| }
|
|
|
| - // Everything seems good... skip ahead to the data.
|
| - bytes += ETC_PKM_HEADER_SIZE;
|
| - desc.fConfig = kETC1_GrPixelConfig;
|
| -
|
| // This texture is likely to be used again so leave it in the cache
|
| GrCacheID cacheID;
|
| generate_bitmap_cache_id(bm, &cacheID);
|
|
|