Index: gm/astcbitmap.cpp |
diff --git a/gm/astcbitmap.cpp b/gm/astcbitmap.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3c9079cfa80df8e8110520981fedb15073ac1b1d |
--- /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); ) |