diff options
Diffstat (limited to 'src/gpu/SkGr.cpp')
-rw-r--r-- | src/gpu/SkGr.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp index d1cecde189..4147855e13 100644 --- a/src/gpu/SkGr.cpp +++ b/src/gpu/SkGr.cpp @@ -40,6 +40,7 @@ #include "effects/GrYUVEffect.h" #ifndef SK_IGNORE_ETC1_SUPPORT +# include "ktx.h" # include "etc1.h" #endif @@ -87,6 +88,22 @@ GrPixelConfig GrIsCompressedTextureDataSupported(GrContext* ctx, SkData* data, *outStartOfDataToUpload = bytes + ETC_PKM_HEADER_SIZE; return kETC1_GrPixelConfig; + } else if (SkKTXFile::is_ktx(bytes, data->size())) { + SkKTXFile ktx(data); + + // Is it actually an ETC1 texture? + if (!ktx.isCompressedFormat(SkTextureCompressor::kETC1_Format)) { + return kUnknown_GrPixelConfig; + } + + // 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() != expectedW || ktx.height() != expectedH) { + return kUnknown_GrPixelConfig; + } + + *outStartOfDataToUpload = ktx.pixelData(); + return kETC1_GrPixelConfig; } #endif return kUnknown_GrPixelConfig; |