Chromium Code Reviews| Index: gm/astcbitmap.cpp |
| diff --git a/gm/astcbitmap.cpp b/gm/astcbitmap.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..d8da8ce6a71972571a1f2a4677d374a2509a64e9 |
| --- /dev/null |
| +++ b/gm/astcbitmap.cpp |
| @@ -0,0 +1,102 @@ |
| +/* |
| + * Copyright 2014 Google Inc. |
| + * |
| + * Use of this source code is governed by a BSD-style license that can be |
| + * found in the LICENSE file. |
| + */ |
| + |
| +#include "gm.h" |
| + |
| +#include "Resources.h" |
| +#include "SkCanvas.h" |
| +#include "SkData.h" |
| +#include "SkDecodingImageGenerator.h" |
| +#include "SkImageDecoder.h" |
| +#include "SkOSFile.h" |
| +#include "SkTextureCompressor.h" |
| + |
| +static const char *kASTCFilenames[] = { |
| + "mandrill_128x128_4x4.astc", // kASTC_4x4_Format |
| + "mandrill_130x128_5x4.astc", // kASTC_5x4_Format |
| + "mandrill_130x130_5x5.astc", // kASTC_5x5_Format |
| + "mandrill_132x130_6x5.astc", // kASTC_6x5_Format |
| + "mandrill_132x132_6x6.astc", // kASTC_6x6_Format |
| + "mandrill_128x130_8x5.astc", // kASTC_8x5_Format |
| + "mandrill_128x132_8x6.astc", // kASTC_8x6_Format |
| + "mandrill_128x128_8x8.astc", // kASTC_8x8_Format |
| + "mandrill_130x130_10x5.astc", // kASTC_10x5_Format |
| + "mandrill_130x132_10x6.astc", // kASTC_10x6_Format |
| + "mandrill_130x128_10x8.astc", // kASTC_10x8_Format |
| + "mandrill_130x130_10x10.astc", // kASTC_10x10_Format |
| + "mandrill_132x130_12x10.astc", // kASTC_12x10_Format |
| + "mandrill_132x132_12x12.astc", // kASTC_12x12_Format |
| +}; |
| + |
| +static const int kNumASTCFilenames = SK_ARRAY_COUNT(kASTCFilenames); |
| + |
| +static inline const char *get_astc_filename(int idx) { |
| + if (idx < 0 || kNumASTCFilenames <= idx) { |
| + return ""; |
| + } |
| + |
| + return kASTCFilenames[idx]; |
| +} |
| + |
| +namespace skiagm { |
| + |
| +/** |
| + * Test decoding an image from an ASTC file and then from compressed ASTC data. |
| + */ |
| +class ASTCBitmapGM : public GM { |
| +public: |
| + ASTCBitmapGM() { } |
| + virtual ~ASTCBitmapGM() { } |
| + |
| +protected: |
| + virtual SkString onShortName() SK_OVERRIDE { |
| + return SkString("astcbitmap"); |
| + } |
| + |
| + virtual SkISize onISize() SK_OVERRIDE { |
| + return SkISize::Make(kGMDimension, kGMDimension); |
| + } |
| + |
| + virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { |
| + for (int j = 0; j < 4; ++j) { |
| + for (int i = 0; i < 4; ++i) { |
| + SkString filename = GetResourcePath(get_astc_filename(j*4+i)); |
| + if (filename == GetResourcePath("")) { |
| + continue; |
| + } |
| + |
| + SkAutoTUnref<SkData> fileData(SkData::NewFromFileName(filename.c_str())); |
| + if (NULL == fileData) { |
| + SkDebugf("Could not open the file. Did you forget to set the resourcePath?\n"); |
| + return; |
| + } |
| + |
| + SkBitmap bm; |
| + if (!SkInstallDiscardablePixelRef( |
| + SkDecodingImageGenerator::Create( |
| + fileData, SkDecodingImageGenerator::Options()), &bm)) { |
| + SkDebugf("Could not install discardable pixel ref.\n"); |
| + return; |
| + } |
| + |
| + canvas->drawBitmap(bm, i*kBitmapDimension, j*kBitmapDimension); |
| + } |
| + } |
| + } |
| + |
| +private: |
|
robertphillips
2014/08/06 21:13:15
The INHERITED goes last.
krajcevski
2014/08/06 22:31:00
Done.
|
| + typedef GM INHERITED; |
| + |
| + static const int kGMDimension = 600; |
| + static const int kBitmapDimension = kGMDimension/4; |
| +}; |
| + |
| +} // namespace skiagm |
| + |
| +////////////////////////////////////////////////////////////////////////////// |
| + |
| +DEF_GM( return SkNEW(skiagm::ASTCBitmapGM); ) |