1/* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#include "gm.h" 9 10#include "Resources.h" 11#include "SkCanvas.h" 12#include "SkData.h" 13#include "SkDecodingImageGenerator.h" 14#include "SkImageDecoder.h" 15#include "SkOSFile.h" 16#include "SkTextureCompressor.h" 17 18static const char *kASTCFilenames[] = { 19 "mandrill_128x128_4x4.astc", // kASTC_4x4_Format 20 "mandrill_130x128_5x4.astc", // kASTC_5x4_Format 21 "mandrill_130x130_5x5.astc", // kASTC_5x5_Format 22 "mandrill_132x130_6x5.astc", // kASTC_6x5_Format 23 "mandrill_132x132_6x6.astc", // kASTC_6x6_Format 24 "mandrill_128x130_8x5.astc", // kASTC_8x5_Format 25 "mandrill_128x132_8x6.astc", // kASTC_8x6_Format 26 "mandrill_128x128_8x8.astc", // kASTC_8x8_Format 27 "mandrill_130x130_10x5.astc", // kASTC_10x5_Format 28 "mandrill_130x132_10x6.astc", // kASTC_10x6_Format 29 "mandrill_130x128_10x8.astc", // kASTC_10x8_Format 30 "mandrill_130x130_10x10.astc", // kASTC_10x10_Format 31 "mandrill_132x130_12x10.astc", // kASTC_12x10_Format 32 "mandrill_132x132_12x12.astc", // kASTC_12x12_Format 33}; 34 35static const int kNumASTCFilenames = SK_ARRAY_COUNT(kASTCFilenames); 36 37static inline const char *get_astc_filename(int idx) { 38 if (idx < 0 || kNumASTCFilenames <= idx) { 39 return ""; 40 } 41 42 return kASTCFilenames[idx]; 43} 44 45namespace skiagm { 46 47/** 48 * Test decoding an image from an ASTC file and then from compressed ASTC data. 49 */ 50class ASTCBitmapGM : public GM { 51public: 52 ASTCBitmapGM() { } 53 virtual ~ASTCBitmapGM() { } 54 55protected: 56 virtual SkString onShortName() SK_OVERRIDE { 57 return SkString("astcbitmap"); 58 } 59 60 virtual SkISize onISize() SK_OVERRIDE { 61 return SkISize::Make(kGMDimension, kGMDimension); 62 } 63 64 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 65 for (int j = 0; j < 4; ++j) { 66 for (int i = 0; i < 4; ++i) { 67 SkString filename = GetResourcePath(get_astc_filename(j*4+i)); 68 if (filename == GetResourcePath("")) { 69 continue; 70 } 71 72 SkAutoTUnref<SkData> fileData(SkData::NewFromFileName(filename.c_str())); 73 if (NULL == fileData) { 74 SkDebugf("Could not open the file. Did you forget to set the resourcePath?\n"); 75 return; 76 } 77 78 SkBitmap bm; 79 if (!SkInstallDiscardablePixelRef( 80 SkDecodingImageGenerator::Create( 81 fileData, SkDecodingImageGenerator::Options()), &bm)) { 82 SkDebugf("Could not install discardable pixel ref.\n"); 83 return; 84 } 85 86 const SkScalar bmX = static_cast<SkScalar>(i*kBitmapDimension); 87 const SkScalar bmY = static_cast<SkScalar>(j*kBitmapDimension); 88 canvas->drawBitmap(bm, bmX, bmY); 89 } 90 } 91 } 92 93private: 94 static const int kGMDimension = 600; 95 static const int kBitmapDimension = kGMDimension/4; 96 97 typedef GM INHERITED; 98}; 99 100} // namespace skiagm 101 102////////////////////////////////////////////////////////////////////////////// 103 104DEF_GM( return SkNEW(skiagm::ASTCBitmapGM); ) 105