OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 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" |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 SkPixmap prevPM; | 144 SkPixmap prevPM; |
145 baseBM.lockPixels(); | 145 baseBM.lockPixels(); |
146 baseBM.peekPixels(&prevPM); | 146 baseBM.peekPixels(&prevPM); |
147 | 147 |
148 SkAutoTUnref<SkMipMap> mm(SkMipMap::Build(baseBM, nullptr)); | 148 SkAutoTUnref<SkMipMap> mm(SkMipMap::Build(baseBM, nullptr)); |
149 | 149 |
150 int index = 0; | 150 int index = 0; |
151 SkMipMap::Level level; | 151 SkMipMap::Level level; |
152 SkScalar scale = 0.5f; | 152 SkScalar scale = 0.5f; |
153 while (mm->extractLevel(scale, &level)) { | 153 while (mm->extractLevel(scale, &level)) { |
154 SkImageInfo info = SkImageInfo::Make(level.fWidth, level.fHeight, | 154 SkBitmap bm = func(prevPM, level.fPixmap); |
155 baseBM.colorType(), baseBM.alph
aType()); | |
156 SkPixmap levelPM{ info, level.fPixels, level.fRowBytes }; | |
157 | |
158 SkBitmap bm = func(prevPM, levelPM); | |
159 DrawAndFrame(canvas, bm, x, y); | 155 DrawAndFrame(canvas, bm, x, y); |
160 | 156 |
161 if (info.width() <= 2 || info.height() <= 2) { | 157 if (level.fPixmap.width() <= 2 || level.fPixmap.height() <= 2) { |
162 break; | 158 break; |
163 } | 159 } |
164 if (index & 1) { | 160 if (index & 1) { |
165 x += info.width() + 4; | 161 x += level.fPixmap.width() + 4; |
166 } else { | 162 } else { |
167 y += info.height() + 4; | 163 y += level.fPixmap.height() + 4; |
168 } | 164 } |
169 scale /= 2; | 165 scale /= 2; |
170 prevPM = levelPM; | 166 prevPM = level.fPixmap; |
171 index += 1; | 167 index += 1; |
172 } | 168 } |
173 } | 169 } |
174 | 170 |
175 void drawSet(SkCanvas* canvas, const SkBitmap& orig) { | 171 void drawSet(SkCanvas* canvas, const SkBitmap& orig) { |
176 SkAutoCanvasRestore acr(canvas, true); | 172 SkAutoCanvasRestore acr(canvas, true); |
177 | 173 |
178 drawLevels(canvas, orig, [](const SkPixmap& prev, const SkPixmap& curr)
{ | 174 drawLevels(canvas, orig, [](const SkPixmap& prev, const SkPixmap& curr)
{ |
179 SkBitmap bm; | 175 SkBitmap bm; |
180 bm.installPixels(curr); | 176 bm.installPixels(curr); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 void drawLevels(SkCanvas* canvas, const SkBitmap& baseBM) { | 252 void drawLevels(SkCanvas* canvas, const SkBitmap& baseBM) { |
257 SkScalar x = 4; | 253 SkScalar x = 4; |
258 SkScalar y = 4; | 254 SkScalar y = 4; |
259 | 255 |
260 SkAutoTUnref<SkMipMap> mm(SkMipMap::Build(baseBM, nullptr)); | 256 SkAutoTUnref<SkMipMap> mm(SkMipMap::Build(baseBM, nullptr)); |
261 | 257 |
262 int index = 0; | 258 int index = 0; |
263 SkMipMap::Level level; | 259 SkMipMap::Level level; |
264 SkScalar scale = 0.5f; | 260 SkScalar scale = 0.5f; |
265 while (mm->extractLevel(scale, &level)) { | 261 while (mm->extractLevel(scale, &level)) { |
266 SkImageInfo info = SkImageInfo::Make(level.fWidth, level.fHeight, | |
267 baseBM.colorType(), baseBM.alph
aType()); | |
268 | |
269 SkBitmap bm; | 262 SkBitmap bm; |
270 bm.installPixels(info, level.fPixels, level.fRowBytes); | 263 bm.installPixels(level.fPixmap); |
271 DrawAndFrame(canvas, bm, x, y); | 264 DrawAndFrame(canvas, bm, x, y); |
272 | 265 |
273 if (info.width() <= 2 || info.height() <= 2) { | 266 if (level.fPixmap.width() <= 2 || level.fPixmap.height() <= 2) { |
274 break; | 267 break; |
275 } | 268 } |
276 if (index & 1) { | 269 if (index & 1) { |
277 x += info.width() + 4; | 270 x += level.fPixmap.width() + 4; |
278 } else { | 271 } else { |
279 y += info.height() + 4; | 272 y += level.fPixmap.height() + 4; |
280 } | 273 } |
281 scale /= 2; | 274 scale /= 2; |
282 index += 1; | 275 index += 1; |
283 } | 276 } |
284 } | 277 } |
285 | 278 |
286 void drawSet(SkCanvas* canvas, const SkBitmap& orig) { | 279 void drawSet(SkCanvas* canvas, const SkBitmap& orig) { |
287 const SkColorType ctypes[] = { | 280 const SkColorType ctypes[] = { |
288 kN32_SkColorType, kRGB_565_SkColorType, kARGB_4444_SkColorType, kGra
y_8_SkColorType | 281 kN32_SkColorType, kRGB_565_SkColorType, kARGB_4444_SkColorType, kGra
y_8_SkColorType |
289 }; | 282 }; |
(...skipping 19 matching lines...) Expand all Loading... |
309 } | 302 } |
310 } | 303 } |
311 | 304 |
312 private: | 305 private: |
313 typedef skiagm::GM INHERITED; | 306 typedef skiagm::GM INHERITED; |
314 }; | 307 }; |
315 DEF_GM( return new ShowMipLevels2(255, 255); ) | 308 DEF_GM( return new ShowMipLevels2(255, 255); ) |
316 DEF_GM( return new ShowMipLevels2(256, 255); ) | 309 DEF_GM( return new ShowMipLevels2(256, 255); ) |
317 DEF_GM( return new ShowMipLevels2(255, 256); ) | 310 DEF_GM( return new ShowMipLevels2(255, 256); ) |
318 DEF_GM( return new ShowMipLevels2(256, 256); ) | 311 DEF_GM( return new ShowMipLevels2(256, 256); ) |
OLD | NEW |