Chromium Code Reviews| 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 #include "SkBlurMask.h" | 9 #include "SkBlurMask.h" |
| 10 #include "SkBlurMaskFilter.h" | 10 #include "SkBlurMaskFilter.h" |
| 11 #include "SkCanvas.h" | 11 #include "SkCanvas.h" |
| 12 #include "SkGradientShader.h" | 12 #include "SkGradientShader.h" |
| 13 #include "SkImage.h" | 13 #include "SkImage.h" |
| 14 | 14 |
| 15 #if SK_SUPPORT_GPU | 15 #if SK_SUPPORT_GPU |
| 16 #include "GrContext.h" | 16 #include "GrContext.h" |
| 17 #include "GrContextOptions.h" | 17 #include "GrContextOptions.h" |
| 18 #include "SkGr.h" | |
| 18 #endif | 19 #endif |
| 19 | 20 |
| 20 static void draw_bitmap_rect(SkCanvas* canvas, const SkBitmap& bitmap, const SkI mage*, | 21 static void draw_bitmap_rect(SkCanvas* canvas, const SkBitmap& bitmap, const SkI mage*, |
| 21 const SkRect& src, const SkRect& dst, | 22 const SkRect& src, const SkRect& dst, |
| 22 const SkPaint* paint, SkCanvas::SrcRectConstraint c onstraint) { | 23 const SkPaint* paint, SkCanvas::SrcRectConstraint c onstraint) { |
| 23 canvas->drawBitmapRect(bitmap, src, dst, paint, constraint); | 24 canvas->drawBitmapRect(bitmap, src, dst, paint, constraint); |
| 24 } | 25 } |
| 25 | 26 |
| 26 static void draw_image_rect(SkCanvas* canvas, const SkBitmap&, const SkImage* im age, | 27 static void draw_image_rect(SkCanvas* canvas, const SkBitmap&, const SkImage* im age, |
| 27 const SkRect& src, const SkRect& dst, | 28 const SkRect& src, const SkRect& dst, |
| 28 const SkPaint* paint, SkCanvas::SrcRectConstraint co nstraint) { | 29 const SkPaint* paint, SkCanvas::SrcRectConstraint co nstraint) { |
| 29 canvas->drawImageRect(image, src, dst, paint, constraint); | 30 canvas->drawImageRect(image, src, dst, paint, constraint); |
| 30 } | 31 } |
| 31 | 32 |
|
robertphillips
2015/11/02 19:37:59
// Upload the tight-fitting sw-backed bitmap to a
bsalomon
2015/11/02 20:17:30
Done.
| |
| 33 static void draw_texture_bitmap_rect(SkCanvas* canvas, const SkBitmap& bitmap, c onst SkImage*, | |
| 34 const SkRect& src, const SkRect& dst, | |
| 35 const SkPaint* paint, | |
| 36 SkCanvas::SrcRectConstraint constraint) { | |
| 37 GrContext* context = canvas->getGrContext(); | |
| 38 if (!context) { | |
| 39 // For non-GPU canvases fallback to drawing the bitmap directly. | |
| 40 canvas->drawBitmapRect(bitmap, src, dst, paint, constraint); | |
| 41 return; | |
| 42 } | |
|
robertphillips
2015/11/02 19:37:59
mv textureBmp to right before the GrWrapTextureInB
bsalomon
2015/11/02 20:17:30
Done.
| |
| 43 SkBitmap textureBmp; | |
| 44 GrSurfaceDesc desc; | |
| 45 desc.fConfig = kAlpha_8_SkColorType == bitmap.colorType() ? kAlpha_8_GrPixel Config : | |
| 46 kSkia8888_GrPixe lConfig; | |
| 47 // Add some padding to the right and beneath the bitmap contents to exercise the case where | |
| 48 // the texture is larger than the bitmap. | |
| 49 desc.fWidth = bitmap.width() + 16; | |
|
robertphillips
2015/11/02 19:37:59
22 ?
bsalomon
2015/11/02 20:17:30
Just wanted a weird number... Added comment.
| |
| 50 desc.fHeight = bitmap.height() + 22; | |
| 51 SkAutoTUnref<GrTexture> texture(context->textureProvider()->createTexture(de sc, true)); | |
| 52 if (!texture) { | |
| 53 return; | |
| 54 } | |
| 55 SkAutoLockPixels al(bitmap); | |
|
robertphillips
2015/11/02 19:37:59
Can we clear the texture to green first ?
bsalomon
2015/11/02 20:17:30
Done.
| |
| 56 texture->writePixels(0, 0, bitmap.width(), bitmap.height(), desc.fConfig, bi tmap.getPixels(), | |
| 57 bitmap.rowBytes()); | |
| 58 GrWrapTextureInBitmap(texture, bitmap.width(), bitmap.height(), true, &textu reBmp); | |
| 59 canvas->drawBitmapRect(textureBmp, src, dst, paint, constraint); | |
| 60 } | |
| 61 | |
| 32 // Create a black&white checked texture with 2 1-pixel rings | 62 // Create a black&white checked texture with 2 1-pixel rings |
| 33 // around the outside edge. The inner ring is red and the outer ring is blue. | 63 // around the outside edge. The inner ring is red and the outer ring is blue. |
| 34 static void make_ringed_color_bitmap(SkBitmap* result, int width, int height) { | 64 static void make_ringed_color_bitmap(SkBitmap* result, int width, int height) { |
| 35 SkASSERT(0 == width % 2 && 0 == height % 2); | 65 SkASSERT(0 == width % 2 && 0 == height % 2); |
| 36 | 66 |
| 37 static const SkPMColor kRed = SkPreMultiplyColor(SK_ColorRED); | 67 static const SkPMColor kRed = SkPreMultiplyColor(SK_ColorRED); |
| 38 static const SkPMColor kBlue = SkPreMultiplyColor(SK_ColorBLUE); | 68 static const SkPMColor kBlue = SkPreMultiplyColor(SK_ColorBLUE); |
| 39 static const SkPMColor kBlack = SkPreMultiplyColor(SK_ColorBLACK); | 69 static const SkPMColor kBlack = SkPreMultiplyColor(SK_ColorBLACK); |
| 40 static const SkPMColor kWhite = SkPreMultiplyColor(SK_ColorWHITE); | 70 static const SkPMColor kWhite = SkPreMultiplyColor(SK_ColorWHITE); |
| 41 | 71 |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 165 static SkShader* make_shader() { | 195 static SkShader* make_shader() { |
| 166 static const SkPoint pts[] = { {0, 0}, {20, 20} }; | 196 static const SkPoint pts[] = { {0, 0}, {20, 20} }; |
| 167 static const SkColor colors[] = { SK_ColorGREEN, SK_ColorYELLOW }; | 197 static const SkColor colors[] = { SK_ColorGREEN, SK_ColorYELLOW }; |
| 168 return SkGradientShader::CreateLinear(pts, colors, nullptr, 2, SkShader::kMi rror_TileMode); | 198 return SkGradientShader::CreateLinear(pts, colors, nullptr, 2, SkShader::kMi rror_TileMode); |
| 169 } | 199 } |
| 170 | 200 |
| 171 static SkShader* make_null_shader() { return nullptr; } | 201 static SkShader* make_null_shader() { return nullptr; } |
| 172 | 202 |
| 173 enum BleedTest { | 203 enum BleedTest { |
| 174 kUseBitmap_BleedTest, | 204 kUseBitmap_BleedTest, |
| 205 kUseTextureBitmap_BleedTest, | |
| 175 kUseImage_BleedTest, | 206 kUseImage_BleedTest, |
| 176 kUseAlphaBitmap_BleedTest, | 207 kUseAlphaBitmap_BleedTest, |
| 208 kUseAlphaTextureBitmap_BleedTest, | |
| 177 kUseAlphaImage_BleedTest, | 209 kUseAlphaImage_BleedTest, |
| 178 kUseAlphaBitmapShader_BleedTest, | 210 kUseAlphaBitmapShader_BleedTest, |
| 211 kUseAlphaTextureBitmapShader_BleedTest, | |
| 179 kUseAlphaImageShader_BleedTest, | 212 kUseAlphaImageShader_BleedTest, |
| 180 }; | 213 }; |
| 181 | 214 |
| 182 const struct { | 215 const struct { |
| 183 const char* fName; | 216 const char* fName; |
| 184 void(*fBmpMaker)(SkBitmap* result, int width, int height); | 217 void(*fBmpMaker)(SkBitmap* result, int width, int height); |
| 185 SkShader*(*fShaderMaker)(); | 218 SkShader*(*fShaderMaker)(); |
| 186 void(*fDraw)(SkCanvas*, const SkBitmap&, const SkImage*, const SkRect&, cons t SkRect&, | 219 void(*fDraw)(SkCanvas*, const SkBitmap&, const SkImage*, const SkRect&, cons t SkRect&, |
| 187 const SkPaint*, SkCanvas::SrcRectConstraint); | 220 const SkPaint*, SkCanvas::SrcRectConstraint); |
| 188 } gBleedRec[] = { | 221 } gBleedRec[] = { |
| 189 { "bleed", make_ringed_color_bitmap, make_null_shader, draw_bitmap_rect }, | 222 { "bleed", make_ringed_color_bitmap, make_null_shad er, draw_bitmap_rect }, |
| 190 { "bleed_image", make_ringed_color_bitmap, make_null_shader, draw_image_rect }, | 223 { "bleed_texture_bmp", make_ringed_color_bitmap, make_null_shad er, draw_texture_bitmap_rect }, |
| 191 { "bleed_alpha_bmp", make_ringed_alpha_bitmap, make_null_shader, draw_bitmap_rect }, | 224 { "bleed_image", make_ringed_color_bitmap, make_null_shad er, draw_image_rect }, |
| 192 { "bleed_alpha_image", make_ringed_alpha_bitmap, make_null_shader, draw_image_rect }, | 225 { "bleed_alpha_bmp", make_ringed_alpha_bitmap, make_null_shad er, draw_bitmap_rect }, |
| 193 { "bleed_alpha_bmp_shader", make_ringed_alpha_bitmap, make_shader, draw_bitmap_rect }, | 226 { "bleed_alpha_texture_bmp", make_ringed_alpha_bitmap, make_null_shad er, draw_texture_bitmap_rect }, |
| 194 { "bleed_alpha_image_shader", make_ringed_alpha_bitmap, make_shader, draw_image_rect }, | 227 { "bleed_alpha_image", make_ringed_alpha_bitmap, make_null_shad er, draw_image_rect }, |
| 228 { "bleed_alpha_bmp_shader", make_ringed_alpha_bitmap, make_shader, draw_bitmap_rect }, | |
| 229 { "bleed_alpha_texture_bmp_shader", make_ringed_alpha_bitmap, make_shader, draw_texture_bitmap_rect }, | |
| 230 { "bleed_alpha_image_shader", make_ringed_alpha_bitmap, make_shader, draw_image_rect }, | |
| 195 }; | 231 }; |
| 196 | 232 |
| 197 // This GM exercises the drawBitmapRect constraints | 233 // This GM exercises the drawBitmapRect constraints |
| 198 class BleedGM : public skiagm::GM { | 234 class BleedGM : public skiagm::GM { |
| 199 public: | 235 public: |
| 200 BleedGM(BleedTest bt) : fBT(bt) {} | 236 BleedGM(BleedTest bt) : fBT(bt) {} |
| 201 | 237 |
| 202 protected: | 238 protected: |
| 203 | 239 |
| 204 SkString onShortName() override { | 240 SkString onShortName() override { |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 407 SkAutoTUnref<SkImage> fImageSmall; | 443 SkAutoTUnref<SkImage> fImageSmall; |
| 408 SkAutoTUnref<SkImage> fImageBig; | 444 SkAutoTUnref<SkImage> fImageBig; |
| 409 | 445 |
| 410 SkAutoTUnref<SkShader> fShader; | 446 SkAutoTUnref<SkShader> fShader; |
| 411 | 447 |
| 412 const BleedTest fBT; | 448 const BleedTest fBT; |
| 413 | 449 |
| 414 typedef GM INHERITED; | 450 typedef GM INHERITED; |
| 415 }; | 451 }; |
| 416 | 452 |
| 453 | |
| 417 DEF_GM( return new BleedGM(kUseBitmap_BleedTest); ) | 454 DEF_GM( return new BleedGM(kUseBitmap_BleedTest); ) |
| 455 DEF_GM( return new BleedGM(kUseTextureBitmap_BleedTest); ) | |
| 418 DEF_GM( return new BleedGM(kUseImage_BleedTest); ) | 456 DEF_GM( return new BleedGM(kUseImage_BleedTest); ) |
| 419 DEF_GM( return new BleedGM(kUseAlphaBitmap_BleedTest); ) | 457 DEF_GM( return new BleedGM(kUseAlphaBitmap_BleedTest); ) |
| 458 DEF_GM( return new BleedGM(kUseAlphaTextureBitmap_BleedTest); ) | |
| 420 DEF_GM( return new BleedGM(kUseAlphaImage_BleedTest); ) | 459 DEF_GM( return new BleedGM(kUseAlphaImage_BleedTest); ) |
| 421 DEF_GM(return new BleedGM(kUseAlphaBitmapShader_BleedTest); ) | 460 DEF_GM( return new BleedGM(kUseAlphaBitmapShader_BleedTest); ) |
| 422 DEF_GM(return new BleedGM(kUseAlphaImageShader_BleedTest); ) | 461 DEF_GM( return new BleedGM(kUseAlphaTextureBitmapShader_BleedTest); ) |
| 462 DEF_GM( return new BleedGM(kUseAlphaImageShader_BleedTest); ) | |
| OLD | NEW |