1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* 2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Copyright 2014 Google Inc. 3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Use of this source code is governed by a BSD-style license that can be 5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * found in the LICENSE file. 6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes#include "gm.h" 9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes#include "Resources.h" 11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes#include "SkCanvas.h" 12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes#include "SkData.h" 13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes#include "SkDecodingImageGenerator.h" 14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes#include "SkImageDecoder.h" 15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes#include "SkOSFile.h" 16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes#include "SkTextureCompressor.h" 17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesstatic const char *kASTCFilenames[] = { 198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath "mandrill_128x128_4x4.astc", // kASTC_4x4_Format 208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath "mandrill_130x128_5x4.astc", // kASTC_5x4_Format 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "mandrill_130x130_5x5.astc", // kASTC_5x5_Format 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "mandrill_132x130_6x5.astc", // kASTC_6x5_Format 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "mandrill_132x132_6x6.astc", // kASTC_6x6_Format 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "mandrill_128x130_8x5.astc", // kASTC_8x5_Format 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "mandrill_128x132_8x6.astc", // kASTC_8x6_Format 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "mandrill_128x128_8x8.astc", // kASTC_8x8_Format 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "mandrill_130x130_10x5.astc", // kASTC_10x5_Format 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "mandrill_130x132_10x6.astc", // kASTC_10x6_Format 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "mandrill_130x128_10x8.astc", // kASTC_10x8_Format 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "mandrill_130x130_10x10.astc", // kASTC_10x10_Format 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "mandrill_132x130_12x10.astc", // kASTC_12x10_Format 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "mandrill_132x132_12x12.astc", // kASTC_12x12_Format 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}; 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesstatic const int kNumASTCFilenames = SK_ARRAY_COUNT(kASTCFilenames); 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesstatic inline const char *get_astc_filename(int idx) { 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (idx < 0 || kNumASTCFilenames <= idx) { 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return ""; 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return kASTCFilenames[idx]; 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesnamespace skiagm { 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test decoding an image from an ASTC file and then from compressed ASTC data. 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesclass ASTCBitmapGM : public GM { 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic: 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ASTCBitmapGM() { } 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes virtual ~ASTCBitmapGM() { } 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesprotected: 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes virtual SkString onShortName() SK_OVERRIDE { 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return SkString("astcbitmap"); 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes virtual SkISize onISize() SK_OVERRIDE { 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return SkISize::Make(kGMDimension, kGMDimension); 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 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