diff options
author | krajcevski <krajcevski@google.com> | 2014-08-07 12:58:38 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-08-07 12:58:38 -0700 |
commit | 95b1b3d82d227141647777d83324aa570b530096 (patch) | |
tree | d173f7f26dc3fb685f1a451e212445e7e74daec9 /gm | |
parent | 34580f75d8f555b2c15a232fb899704b5dd57f25 (diff) |
Add astcbitmap to gm slides.
Add additional ASTC formats.
Add astc image decoder files.
R=reed@google.com, robertphillips@google.com, halcanary@google.com
Author: krajcevski@google.com
Review URL: https://codereview.chromium.org/444093002
Diffstat (limited to 'gm')
-rw-r--r-- | gm/astcbitmap.cpp | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/gm/astcbitmap.cpp b/gm/astcbitmap.cpp new file mode 100644 index 0000000000..3c9079cfa8 --- /dev/null +++ b/gm/astcbitmap.cpp @@ -0,0 +1,104 @@ +/* + * 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; + } + + const SkScalar bmX = static_cast<SkScalar>(i*kBitmapDimension); + const SkScalar bmY = static_cast<SkScalar>(j*kBitmapDimension); + canvas->drawBitmap(bm, bmX, bmY); + } + } + } + +private: + static const int kGMDimension = 600; + static const int kBitmapDimension = kGMDimension/4; + + typedef GM INHERITED; +}; + +} // namespace skiagm + +////////////////////////////////////////////////////////////////////////////// + +DEF_GM( return SkNEW(skiagm::ASTCBitmapGM); ) |