OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "gm.h" | 8 #include "gm.h" |
9 | 9 |
10 #include "Resources.h" | 10 #include "Resources.h" |
11 #include "SkGradientShader.h" | 11 #include "SkGradientShader.h" |
12 #include "SkTypeface.h" | 12 #include "SkTypeface.h" |
13 #include "SkImageDecoder.h" | 13 #include "SkImageDecoder.h" |
14 #include "SkStream.h" | 14 #include "SkStream.h" |
15 #include "SkPaint.h" | 15 #include "SkPaint.h" |
16 | 16 |
| 17 static void make_checker(SkBitmap* bm, int size, int numChecks) { |
| 18 bm->allocN32Pixels(size, size); |
| 19 for (int y = 0; y < size; ++y) { |
| 20 for (int x = 0; x < size; ++x) { |
| 21 SkPMColor* s = bm->getAddr32(x, y); |
| 22 int cx = (x * numChecks) / size; |
| 23 int cy = (y * numChecks) / size; |
| 24 if ((cx+cy)%2) { |
| 25 *s = 0xFFFFFFFF; |
| 26 } else { |
| 27 *s = 0xFF000000; |
| 28 } |
| 29 } |
| 30 } |
| 31 } |
| 32 |
17 static void setTypeface(SkPaint* paint, const char name[], SkTypeface::Style sty
le) { | 33 static void setTypeface(SkPaint* paint, const char name[], SkTypeface::Style sty
le) { |
18 sk_tool_utils::set_portable_typeface(paint, name, style); | 34 sk_tool_utils::set_portable_typeface(paint, name, style); |
19 } | 35 } |
20 | 36 |
21 class DownsampleBitmapGM : public skiagm::GM { | 37 class DownsampleBitmapGM : public skiagm::GM { |
22 public: | 38 public: |
23 SkBitmap fBM; | 39 SkBitmap fBM; |
24 SkString fName; | 40 SkString fName; |
25 bool fBitmapMade; | 41 bool fBitmapMade; |
26 SkPaint::FilterLevel fFilterLevel; | 42 SkPaint::FilterLevel fFilterLevel; |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 : INHERITED(filterLevel), fSize(size), fNumChecks(numChecks) | 148 : INHERITED(filterLevel), fSize(size), fNumChecks(numChecks) |
133 { | 149 { |
134 fName.printf("downsamplebitmap_checkerboard_%s_%d_%d", this->filterL
evelToString(), fSize, fNumChecks); | 150 fName.printf("downsamplebitmap_checkerboard_%s_%d_%d", this->filterL
evelToString(), fSize, fNumChecks); |
135 } | 151 } |
136 | 152 |
137 protected: | 153 protected: |
138 int fSize; | 154 int fSize; |
139 int fNumChecks; | 155 int fNumChecks; |
140 | 156 |
141 void make_bitmap() SK_OVERRIDE { | 157 void make_bitmap() SK_OVERRIDE { |
142 fBM.allocN32Pixels(fSize, fSize); | 158 make_checker(&fBM, fSize, fNumChecks); |
143 for (int y = 0; y < fSize; ++y) { | |
144 for (int x = 0; x < fSize; ++x) { | |
145 SkPMColor* s = fBM.getAddr32(x, y); | |
146 int cx = (x * fNumChecks) / fSize; | |
147 int cy = (y * fNumChecks) / fSize; | |
148 if ((cx+cy)%2) { | |
149 *s = 0xFFFFFFFF; | |
150 } else { | |
151 *s = 0xFF000000; | |
152 } | |
153 } | |
154 } | |
155 } | 159 } |
156 private: | 160 private: |
157 typedef DownsampleBitmapGM INHERITED; | 161 typedef DownsampleBitmapGM INHERITED; |
158 }; | 162 }; |
159 | 163 |
160 class DownsampleBitmapImageGM: public DownsampleBitmapGM { | 164 class DownsampleBitmapImageGM: public DownsampleBitmapGM { |
161 public: | 165 public: |
162 DownsampleBitmapImageGM(const char filename[], SkPaint::FilterLevel filter
Level) | 166 DownsampleBitmapImageGM(const char filename[], SkPaint::FilterLevel filter
Level) |
163 : INHERITED(filterLevel), fFilename(filename) | 167 : INHERITED(filterLevel), fFilename(filename) |
164 { | 168 { |
(...skipping 18 matching lines...) Expand all Loading... |
183 } else { | 187 } else { |
184 fBM.allocN32Pixels(1, 1); | 188 fBM.allocN32Pixels(1, 1); |
185 *(fBM.getAddr32(0,0)) = 0xFF0000FF; // red == bad | 189 *(fBM.getAddr32(0,0)) = 0xFF0000FF; // red == bad |
186 } | 190 } |
187 fSize = fBM.height(); | 191 fSize = fBM.height(); |
188 } | 192 } |
189 private: | 193 private: |
190 typedef DownsampleBitmapGM INHERITED; | 194 typedef DownsampleBitmapGM INHERITED; |
191 }; | 195 }; |
192 | 196 |
| 197 #include "SkMipMap.h" |
| 198 class ShowMipLevels : public skiagm::GM { |
| 199 public: |
| 200 SkBitmap fBM; |
| 201 |
| 202 ShowMipLevels() { |
| 203 this->setBGColor(0xFFDDDDDD); |
| 204 make_checker(&fBM, 512, 256); |
| 205 } |
| 206 |
| 207 protected: |
| 208 #if 0 |
| 209 uint32_t onGetFlags() const SK_OVERRIDE { |
| 210 return kSkipTiled_Flag; |
| 211 } |
| 212 #endif |
| 213 |
| 214 SkString onShortName() SK_OVERRIDE { |
| 215 return SkString("showmiplevels"); |
| 216 } |
| 217 |
| 218 SkISize onISize() SK_OVERRIDE { |
| 219 return SkISize::Make(fBM.width() + 8, 2 * fBM.height() + 80); |
| 220 } |
| 221 |
| 222 void onDraw(SkCanvas* canvas) SK_OVERRIDE { |
| 223 SkScalar x = 4; |
| 224 SkScalar y = 4; |
| 225 canvas->drawBitmap(fBM, x, y, NULL); |
| 226 y += fBM.height() + 4; |
| 227 |
| 228 SkAutoTUnref<SkMipMap> mm(SkMipMap::Build(fBM, NULL)); |
| 229 |
| 230 SkMipMap::Level level; |
| 231 SkScalar scale = 0.5f; |
| 232 while (mm->extractLevel(scale, &level)) { |
| 233 SkImageInfo info = SkImageInfo::MakeN32Premul(level.fWidth, level.fH
eight); |
| 234 SkBitmap bm; |
| 235 bm.installPixels(info, level.fPixels, level.fRowBytes); |
| 236 canvas->drawBitmap(bm, x, y, NULL); |
| 237 y += bm.height() + 4; |
| 238 scale /= 2; |
| 239 if (info.width() == 1 || info.height() == 1) { |
| 240 break; |
| 241 } |
| 242 } |
| 243 } |
| 244 |
| 245 private: |
| 246 typedef skiagm::GM INHERITED; |
| 247 }; |
| 248 DEF_GM( return new ShowMipLevels; ) |
| 249 |
193 ////////////////////////////////////////////////////////////////////////////// | 250 ////////////////////////////////////////////////////////////////////////////// |
194 | 251 |
195 DEF_GM( return new DownsampleBitmapTextGM(72, SkPaint::kHigh_FilterLevel); ) | 252 DEF_GM( return new DownsampleBitmapTextGM(72, SkPaint::kHigh_FilterLevel); ) |
196 DEF_GM( return new DownsampleBitmapCheckerboardGM(512,256, SkPaint::kHigh_Filter
Level); ) | 253 DEF_GM( return new DownsampleBitmapCheckerboardGM(512,256, SkPaint::kHigh_Filter
Level); ) |
197 DEF_GM( return new DownsampleBitmapImageGM("mandrill_512.png", SkPaint::kHigh_Fi
lterLevel); ) | 254 DEF_GM( return new DownsampleBitmapImageGM("mandrill_512.png", SkPaint::kHigh_Fi
lterLevel); ) |
198 DEF_GM( return new DownsampleBitmapImageGM("mandrill_132x132_12x12.astc", | 255 DEF_GM( return new DownsampleBitmapImageGM("mandrill_132x132_12x12.astc", |
199 SkPaint::kHigh_FilterLevel); ) | 256 SkPaint::kHigh_FilterLevel); ) |
200 | 257 |
201 DEF_GM( return new DownsampleBitmapTextGM(72, SkPaint::kMedium_FilterLevel); ) | 258 DEF_GM( return new DownsampleBitmapTextGM(72, SkPaint::kMedium_FilterLevel); ) |
202 DEF_GM( return new DownsampleBitmapCheckerboardGM(512,256, SkPaint::kMedium_Filt
erLevel); ) | 259 DEF_GM( return new DownsampleBitmapCheckerboardGM(512,256, SkPaint::kMedium_Filt
erLevel); ) |
203 DEF_GM( return new DownsampleBitmapImageGM("mandrill_512.png", SkPaint::kMedium_
FilterLevel); ) | 260 DEF_GM( return new DownsampleBitmapImageGM("mandrill_512.png", SkPaint::kMedium_
FilterLevel); ) |
204 DEF_GM( return new DownsampleBitmapImageGM("mandrill_132x132_12x12.astc", | 261 DEF_GM( return new DownsampleBitmapImageGM("mandrill_132x132_12x12.astc", |
205 SkPaint::kMedium_FilterLevel); ) | 262 SkPaint::kMedium_FilterLevel); ) |
206 | 263 |
207 DEF_GM( return new DownsampleBitmapTextGM(72, SkPaint::kLow_FilterLevel); ) | 264 DEF_GM( return new DownsampleBitmapTextGM(72, SkPaint::kLow_FilterLevel); ) |
208 DEF_GM( return new DownsampleBitmapCheckerboardGM(512,256, SkPaint::kLow_FilterL
evel); ) | 265 DEF_GM( return new DownsampleBitmapCheckerboardGM(512,256, SkPaint::kLow_FilterL
evel); ) |
209 DEF_GM( return new DownsampleBitmapImageGM("mandrill_512.png", SkPaint::kLow_Fil
terLevel); ) | 266 DEF_GM( return new DownsampleBitmapImageGM("mandrill_512.png", SkPaint::kLow_Fil
terLevel); ) |
210 DEF_GM( return new DownsampleBitmapImageGM("mandrill_132x132_12x12.astc", | 267 DEF_GM( return new DownsampleBitmapImageGM("mandrill_132x132_12x12.astc", |
211 SkPaint::kLow_FilterLevel); ) | 268 SkPaint::kLow_FilterLevel); ) |
212 | 269 |
213 DEF_GM( return new DownsampleBitmapTextGM(72, SkPaint::kNone_FilterLevel); ) | 270 DEF_GM( return new DownsampleBitmapTextGM(72, SkPaint::kNone_FilterLevel); ) |
214 DEF_GM( return new DownsampleBitmapCheckerboardGM(512,256, SkPaint::kNone_Filter
Level); ) | 271 DEF_GM( return new DownsampleBitmapCheckerboardGM(512,256, SkPaint::kNone_Filter
Level); ) |
215 DEF_GM( return new DownsampleBitmapImageGM("mandrill_512.png", SkPaint::kNone_Fi
lterLevel); ) | 272 DEF_GM( return new DownsampleBitmapImageGM("mandrill_512.png", SkPaint::kNone_Fi
lterLevel); ) |
216 DEF_GM( return new DownsampleBitmapImageGM("mandrill_132x132_12x12.astc", | 273 DEF_GM( return new DownsampleBitmapImageGM("mandrill_132x132_12x12.astc", |
217 SkPaint::kNone_FilterLevel); ) | 274 SkPaint::kNone_FilterLevel); ) |
OLD | NEW |