Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/effects/SkMorphologyImageFilter.cpp

Issue 1245183002: Misc cleanup (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Address gcc complaint Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/effects/SkGpuBlurUtils.cpp ('k') | src/effects/SkXfermodeImageFilter.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 The Android Open Source Project 2 * Copyright 2012 The Android Open Source Project
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 "SkMorphologyImageFilter.h" 8 #include "SkMorphologyImageFilter.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 131
132 bool SkMorphologyImageFilter::filterImageGeneric(SkMorphologyImageFilter::Proc p rocX, 132 bool SkMorphologyImageFilter::filterImageGeneric(SkMorphologyImageFilter::Proc p rocX,
133 SkMorphologyImageFilter::Proc p rocY, 133 SkMorphologyImageFilter::Proc p rocY,
134 Proxy* proxy, 134 Proxy* proxy,
135 const SkBitmap& source, 135 const SkBitmap& source,
136 const Context& ctx, 136 const Context& ctx,
137 SkBitmap* dst, 137 SkBitmap* dst,
138 SkIPoint* offset) const { 138 SkIPoint* offset) const {
139 SkBitmap src = source; 139 SkBitmap src = source;
140 SkIPoint srcOffset = SkIPoint::Make(0, 0); 140 SkIPoint srcOffset = SkIPoint::Make(0, 0);
141 if (getInput(0) && !getInput(0)->filterImage(proxy, source, ctx, &src, &srcO ffset)) { 141 if (this->getInput(0) &&
142 !this->getInput(0)->filterImage(proxy, source, ctx, &src, &srcOffset)) {
142 return false; 143 return false;
143 } 144 }
144 145
145 if (src.colorType() != kN32_SkColorType) { 146 if (src.colorType() != kN32_SkColorType) {
146 return false; 147 return false;
147 } 148 }
148 149
149 SkIRect bounds; 150 SkIRect bounds;
150 if (!this->applyCropRect(ctx, proxy, src, &srcOffset, &bounds, &src)) { 151 if (!this->applyCropRect(ctx, proxy, src, &srcOffset, &bounds, &src)) {
151 return false; 152 return false;
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 dilateXProc = dilate<kX>; 222 dilateXProc = dilate<kX>;
222 } 223 }
223 Proc dilateYProc = SkMorphologyGetPlatformProc(kDilateY_SkMorphologyProcType ); 224 Proc dilateYProc = SkMorphologyGetPlatformProc(kDilateY_SkMorphologyProcType );
224 if (!dilateYProc) { 225 if (!dilateYProc) {
225 dilateYProc = dilate<kY>; 226 dilateYProc = dilate<kY>;
226 } 227 }
227 return this->filterImageGeneric(dilateXProc, dilateYProc, proxy, source, ctx , dst, offset); 228 return this->filterImageGeneric(dilateXProc, dilateYProc, proxy, source, ctx , dst, offset);
228 } 229 }
229 230
230 void SkMorphologyImageFilter::computeFastBounds(const SkRect& src, SkRect* dst) const { 231 void SkMorphologyImageFilter::computeFastBounds(const SkRect& src, SkRect* dst) const {
231 if (getInput(0)) { 232 if (this->getInput(0)) {
232 getInput(0)->computeFastBounds(src, dst); 233 this->getInput(0)->computeFastBounds(src, dst);
233 } else { 234 } else {
234 *dst = src; 235 *dst = src;
235 } 236 }
236 dst->outset(SkIntToScalar(fRadius.width()), SkIntToScalar(fRadius.height())) ; 237 dst->outset(SkIntToScalar(fRadius.width()), SkIntToScalar(fRadius.height())) ;
237 } 238 }
238 239
239 bool SkMorphologyImageFilter::onFilterBounds(const SkIRect& src, const SkMatrix& ctm, 240 bool SkMorphologyImageFilter::onFilterBounds(const SkIRect& src, const SkMatrix& ctm,
240 SkIRect* dst) const { 241 SkIRect* dst) const {
241 SkIRect bounds = src; 242 SkIRect bounds = src;
242 SkVector radius = SkVector::Make(SkIntToScalar(this->radius().width()), 243 SkVector radius = SkVector::Make(SkIntToScalar(this->radius().width()),
243 SkIntToScalar(this->radius().height())); 244 SkIntToScalar(this->radius().height()));
244 ctm.mapVectors(&radius, 1); 245 ctm.mapVectors(&radius, 1);
245 bounds.outset(SkScalarCeilToInt(radius.x()), SkScalarCeilToInt(radius.y())); 246 bounds.outset(SkScalarCeilToInt(radius.x()), SkScalarCeilToInt(radius.y()));
246 if (getInput(0) && !getInput(0)->filterBounds(bounds, ctm, &bounds)) { 247 if (this->getInput(0) && !this->getInput(0)->filterBounds(bounds, ctm, &boun ds)) {
247 return false; 248 return false;
248 } 249 }
249 *dst = bounds; 250 *dst = bounds;
250 return true; 251 return true;
251 } 252 }
252 253
253 SkFlattenable* SkErodeImageFilter::CreateProc(SkReadBuffer& buffer) { 254 SkFlattenable* SkErodeImageFilter::CreateProc(SkReadBuffer& buffer) {
254 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); 255 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
255 const int width = buffer.readInt(); 256 const int width = buffer.readInt();
256 const int height = buffer.readInt(); 257 const int height = buffer.readInt();
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 SkIntToScalar(srcTexture->height()))); 664 SkIntToScalar(srcTexture->height())));
664 665
665 SkIRect dstRect = SkIRect::MakeWH(rect.width(), rect.height()); 666 SkIRect dstRect = SkIRect::MakeWH(rect.width(), rect.height());
666 GrSurfaceDesc desc; 667 GrSurfaceDesc desc;
667 desc.fFlags = kRenderTarget_GrSurfaceFlag; 668 desc.fFlags = kRenderTarget_GrSurfaceFlag;
668 desc.fWidth = rect.width(); 669 desc.fWidth = rect.width();
669 desc.fHeight = rect.height(); 670 desc.fHeight = rect.height();
670 desc.fConfig = kSkia8888_GrPixelConfig; 671 desc.fConfig = kSkia8888_GrPixelConfig;
671 SkIRect srcRect = rect; 672 SkIRect srcRect = rect;
672 673
673 GrDrawContext* drawContext = context->drawContext();
674 if (!drawContext) {
675 return false;
676 }
677
678 if (radius.fWidth > 0) { 674 if (radius.fWidth > 0) {
679 GrTexture* texture = context->textureProvider()->refScratchTexture( 675 GrTexture* dst = context->textureProvider()->refScratchTexture(
brucedawson 2015/07/23 17:52:12 'dst' is a confusing variable name to use here bec
680 desc, GrTextureProvider::kApprox_ScratchTexMatch); 676 desc, GrTextureProvider::kApprox_ScratchTexMatch);
681 if (NULL == texture) { 677 if (NULL == dst) {
682 return false; 678 return false;
683 } 679 }
684 apply_morphology_pass(drawContext, texture->asRenderTarget(), clip, srcT exture, 680 GrDrawContext* dstDrawContext = context->drawContext();
681 if (!dstDrawContext) {
682 return false;
683 }
684
685 apply_morphology_pass(dstDrawContext, dst->asRenderTarget(), clip, srcTe xture,
685 srcRect, dstRect, radius.fWidth, morphType, 686 srcRect, dstRect, radius.fWidth, morphType,
686 Gr1DKernelEffect::kX_Direction); 687 Gr1DKernelEffect::kX_Direction);
687 SkIRect clearRect = SkIRect::MakeXYWH(dstRect.fLeft, dstRect.fBottom, 688 SkIRect clearRect = SkIRect::MakeXYWH(dstRect.fLeft, dstRect.fBottom,
688 dstRect.width(), radius.fHeight); 689 dstRect.width(), radius.fHeight);
689 GrColor clearColor = GrMorphologyEffect::kErode_MorphologyType == morphT ype ? 690 GrColor clearColor = GrMorphologyEffect::kErode_MorphologyType == morphT ype ?
690 SK_ColorWHITE : 691 SK_ColorWHITE :
691 SK_ColorTRANSPARENT; 692 SK_ColorTRANSPARENT;
692 drawContext->clear(texture->asRenderTarget(), &clearRect, clearColor, fa lse); 693 dstDrawContext->clear(dst->asRenderTarget(), &clearRect, clearColor, fal se);
693 srcTexture.reset(texture); 694
695 srcTexture.reset(dst);
694 srcRect = dstRect; 696 srcRect = dstRect;
695 } 697 }
696 if (radius.fHeight > 0) { 698 if (radius.fHeight > 0) {
697 GrTexture* texture = context->textureProvider()->refScratchTexture(desc, 699 GrTexture* dst = context->textureProvider()->refScratchTexture(desc,
brucedawson 2015/07/23 17:52:11 Ditto. FWIW.
698 GrTextureProvider::kApprox_ScratchTexMatch); 700 GrTextureProvider::kApprox_ScratchTexMatch);
699 if (NULL == texture) { 701 if (NULL == dst) {
700 return false; 702 return false;
701 } 703 }
702 apply_morphology_pass(drawContext, texture->asRenderTarget(), clip, srcT exture, 704 GrDrawContext* dstDrawContext = context->drawContext();
705 if (!dstDrawContext) {
706 return false;
707 }
708
709 apply_morphology_pass(dstDrawContext, dst->asRenderTarget(), clip, srcTe xture,
703 srcRect, dstRect, radius.fHeight, morphType, 710 srcRect, dstRect, radius.fHeight, morphType,
704 Gr1DKernelEffect::kY_Direction); 711 Gr1DKernelEffect::kY_Direction);
705 srcTexture.reset(texture); 712
713 srcTexture.reset(dst);
706 } 714 }
707 SkImageFilter::WrapTexture(srcTexture, rect.width(), rect.height(), dst); 715 SkImageFilter::WrapTexture(srcTexture, rect.width(), rect.height(), dst);
brucedawson 2015/07/23 17:52:12 This appears to be the only one of the seven refer
708 return true; 716 return true;
709 } 717 }
710 718
711 }; 719 };
712 720
713 bool SkMorphologyImageFilter::filterImageGPUGeneric(bool dilate, 721 bool SkMorphologyImageFilter::filterImageGPUGeneric(bool dilate,
714 Proxy* proxy, 722 Proxy* proxy,
715 const SkBitmap& src, 723 const SkBitmap& src,
716 const Context& ctx, 724 const Context& ctx,
717 SkBitmap* result, 725 SkBitmap* result,
718 SkIPoint* offset) const { 726 SkIPoint* offset) const {
719 SkBitmap input = src; 727 SkBitmap input = src;
720 SkIPoint srcOffset = SkIPoint::Make(0, 0); 728 SkIPoint srcOffset = SkIPoint::Make(0, 0);
721 if (getInput(0) && !getInput(0)->getInputResultGPU(proxy, src, ctx, &input, &srcOffset)) { 729 if (this->getInput(0) &&
730 !this->getInput(0)->getInputResultGPU(proxy, src, ctx, &input, &srcOffse t)) {
722 return false; 731 return false;
723 } 732 }
724 SkIRect bounds; 733 SkIRect bounds;
725 if (!this->applyCropRect(ctx, proxy, input, &srcOffset, &bounds, &input)) { 734 if (!this->applyCropRect(ctx, proxy, input, &srcOffset, &bounds, &input)) {
726 return false; 735 return false;
727 } 736 }
728 SkVector radius = SkVector::Make(SkIntToScalar(this->radius().width()), 737 SkVector radius = SkVector::Make(SkIntToScalar(this->radius().width()),
729 SkIntToScalar(this->radius().height())); 738 SkIntToScalar(this->radius().height()));
730 ctx.ctm().mapVectors(&radius, 1); 739 ctx.ctm().mapVectors(&radius, 1);
731 int width = SkScalarFloorToInt(radius.fX); 740 int width = SkScalarFloorToInt(radius.fX);
732 int height = SkScalarFloorToInt(radius.fY); 741 int height = SkScalarFloorToInt(radius.fY);
733 742
734 if (width < 0 || height < 0) { 743 if (width < 0 || height < 0) {
735 return false; 744 return false;
736 } 745 }
737 746
738 SkIRect srcBounds = bounds; 747 SkIRect srcBounds = bounds;
739 srcBounds.offset(-srcOffset); 748 srcBounds.offset(-srcOffset);
740 if (width == 0 && height == 0) { 749 if (width == 0 && height == 0) {
741 input.extractSubset(result, srcBounds); 750 input.extractSubset(result, srcBounds);
742 offset->fX = bounds.left(); 751 offset->fX = bounds.left();
743 offset->fY = bounds.top(); 752 offset->fY = bounds.top();
744 return true; 753 return true;
745 } 754 }
746 755
747 GrMorphologyEffect::MorphologyType type = dilate ? GrMorphologyEffect::kDila te_MorphologyType : GrMorphologyEffect::kErode_MorphologyType; 756 GrMorphologyEffect::MorphologyType type = dilate ? GrMorphologyEffect::kDila te_MorphologyType
748 if (!apply_morphology(input, srcBounds, type, 757 : GrMorphologyEffect::kErod e_MorphologyType;
749 SkISize::Make(width, height), result)) { 758 if (!apply_morphology(input, srcBounds, type, SkISize::Make(width, height), result)) {
750 return false; 759 return false;
751 } 760 }
752 offset->fX = bounds.left(); 761 offset->fX = bounds.left();
753 offset->fY = bounds.top(); 762 offset->fY = bounds.top();
754 return true; 763 return true;
755 } 764 }
756 765
757 bool SkDilateImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, cons t Context& ctx, 766 bool SkDilateImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, cons t Context& ctx,
758 SkBitmap* result, SkIPoint* offset) con st { 767 SkBitmap* result, SkIPoint* offset) con st {
759 return this->filterImageGPUGeneric(true, proxy, src, ctx, result, offset); 768 return this->filterImageGPUGeneric(true, proxy, src, ctx, result, offset);
760 } 769 }
761 770
762 bool SkErodeImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const Context& ctx, 771 bool SkErodeImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const Context& ctx,
763 SkBitmap* result, SkIPoint* offset) cons t { 772 SkBitmap* result, SkIPoint* offset) cons t {
764 return this->filterImageGPUGeneric(false, proxy, src, ctx, result, offset); 773 return this->filterImageGPUGeneric(false, proxy, src, ctx, result, offset);
765 } 774 }
766 775
767 #endif 776 #endif
OLDNEW
« no previous file with comments | « src/effects/SkGpuBlurUtils.cpp ('k') | src/effects/SkXfermodeImageFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698