OLD | NEW |
---|---|
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "SkBlurMaskFilter.h" | 9 #include "SkBlurMaskFilter.h" |
10 #include "SkBlurMask.h" | 10 #include "SkBlurMask.h" |
(...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
520 typedef GrGLRectBlurEffect GLEffect; | 520 typedef GrGLRectBlurEffect GLEffect; |
521 | 521 |
522 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; | 522 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; |
523 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags ) const SK_OVERRIDE; | 523 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags ) const SK_OVERRIDE; |
524 | 524 |
525 /** | 525 /** |
526 * Create a simple filter effect with custom bicubic coefficients. | 526 * Create a simple filter effect with custom bicubic coefficients. |
527 */ | 527 */ |
528 static GrEffectRef* Create(GrContext *context, const SkRect& rect, | 528 static GrEffectRef* Create(GrContext *context, const SkRect& rect, |
529 float sigma) { | 529 float sigma) { |
530 GrTexture *horizontalScanline, *verticalScanline; | 530 GrTexture *horizontalScanline = NULL, *verticalScanline = NULL; |
531 bool createdScanlines = CreateScanlineTextures(context, sigma, | 531 bool createdScanlines = CreateScanlineTextures(context, sigma, |
532 SkScalarCeilToInt(rect.wi dth()), | 532 SkScalarCeilToInt(rect.wi dth()), |
533 SkScalarCeilToInt(rect.he ight()), | 533 SkScalarCeilToInt(rect.he ight()), |
534 &horizontalScanline, &ver ticalScanline); | 534 &horizontalScanline, &ver ticalScanline); |
robertphillips
2014/01/31 13:33:10
Won't this potentially cause a problem if the hori
humper
2014/01/31 13:51:17
yeah, I'll land a better fix for this once this pa
| |
535 if (!createdScanlines) { | 535 SkAutoTUnref<GrTexture> hunref(horizontalScanline), vunref(verticalScan line); |
536 if (!createdScanlines) { | |
536 return NULL; | 537 return NULL; |
537 } | 538 } |
538 AutoEffectUnref effect(SkNEW_ARGS(GrRectBlurEffect, (rect, sigma, | 539 AutoEffectUnref effect(SkNEW_ARGS(GrRectBlurEffect, (rect, sigma, |
539 horizontalScanline, verticalScanline))); | 540 horizontalScanline, verticalScanline))); |
540 return CreateEffectRef(effect); | 541 return CreateEffectRef(effect); |
541 } | 542 } |
542 | 543 |
543 unsigned int getWidth() const { return fWidth; } | 544 unsigned int getWidth() const { return fWidth; } |
544 unsigned int getHeight() const { return fHeight; } | 545 unsigned int getHeight() const { return fHeight; } |
545 float getSigma() const { return fSigma; } | 546 float getSigma() const { return fSigma; } |
546 const GrCoordTransform& getTransform() const { return fTransform; } | 547 const GrCoordTransform& getTransform() const { return fTransform; } |
547 | 548 |
548 private: | 549 private: |
549 GrRectBlurEffect(const SkRect& rect, float sigma, | 550 GrRectBlurEffect(const SkRect& rect, float sigma, |
550 GrTexture *horizontal_scanline, GrTexture *vertical_scanlin e); | 551 GrTexture *horizontal_scanline, GrTexture *vertical_scanlin e); |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
679 ada.reset(profile); | 680 ada.reset(profile); |
680 } | 681 } |
681 | 682 |
682 SkAutoTMalloc<uint8_t> verticalPixels(height); | 683 SkAutoTMalloc<uint8_t> verticalPixels(height); |
683 SkBlurMask::ComputeBlurredScanline(verticalPixels, profile, height, sigm a); | 684 SkBlurMask::ComputeBlurredScanline(verticalPixels, profile, height, sigm a); |
684 | 685 |
685 *verticalScanline = context->createTexture(¶ms, texDesc, verticalCac heID, | 686 *verticalScanline = context->createTexture(¶ms, texDesc, verticalCac heID, |
686 verticalPixels, 0); | 687 verticalPixels, 0); |
687 | 688 |
688 if (NULL == *verticalScanline) { | 689 if (NULL == *verticalScanline) { |
690 (*horizontalScanline)->unref(); | |
689 return false; | 691 return false; |
690 } | 692 } |
691 | 693 |
692 } | 694 } |
693 return true; | 695 return true; |
694 } | 696 } |
695 | 697 |
696 GrRectBlurEffect::GrRectBlurEffect(const SkRect& rect, float sigma, | 698 GrRectBlurEffect::GrRectBlurEffect(const SkRect& rect, float sigma, |
697 GrTexture *horizontal_scanline, GrTexture *ve rtical_scanline) | 699 GrTexture *horizontal_scanline, GrTexture *ve rtical_scanline) |
698 : INHERITED(), | 700 : INHERITED(), |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
895 } else { | 897 } else { |
896 str->append("None"); | 898 str->append("None"); |
897 } | 899 } |
898 str->append("))"); | 900 str->append("))"); |
899 } | 901 } |
900 #endif | 902 #endif |
901 | 903 |
902 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) | 904 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) |
903 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) | 905 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) |
904 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 906 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
OLD | NEW |