Index: src/core/SkBitmapFilter.cpp |
diff --git a/src/core/SkBitmapFilter.cpp b/src/core/SkBitmapFilter.cpp |
index 20a05142506c1890e2c4eea964299def656da068..fce4c1d5fbc2f1c9b913e89515bea1481c33e013 100644 |
--- a/src/core/SkBitmapFilter.cpp |
+++ b/src/core/SkBitmapFilter.cpp |
@@ -29,6 +29,7 @@ void highQualityFilter(ColorPacker pack, const SkBitmapProcState& s, int x, int |
const int maxX = s.fBitmap->width(); |
const int maxY = s.fBitmap->height(); |
SkAutoTMalloc<SkScalar> xWeights(maxX); |
+ const SkBitmapFilter* filter = s.getBitmapFilter(); |
while (count-- > 0) { |
SkPoint srcPt; |
@@ -40,30 +41,33 @@ void highQualityFilter(ColorPacker pack, const SkBitmapProcState& s, int x, int |
SkScalar weight = 0; |
SkScalar fr = 0, fg = 0, fb = 0, fa = 0; |
- int y0 = SkClampMax(SkScalarCeilToInt(srcPt.fY-s.getBitmapFilter()->width()), maxY); |
- int y1 = SkClampMax(SkScalarFloorToInt(srcPt.fY+s.getBitmapFilter()->width()+1), maxY); |
- int x0 = SkClampMax(SkScalarCeilToInt(srcPt.fX-s.getBitmapFilter()->width()), maxX); |
- int x1 = SkClampMax(SkScalarFloorToInt(srcPt.fX+s.getBitmapFilter()->width())+1, maxX); |
+ int y0 = SkClampMax(SkScalarCeilToInt(srcPt.fY - filter->width()), maxY); |
+ int y1 = SkClampMax(SkScalarFloorToInt(srcPt.fY + filter->width() + 1), maxY); |
+ int x0 = SkClampMax(SkScalarCeilToInt(srcPt.fX - filter->width()), maxX); |
+ int x1 = SkClampMax(SkScalarFloorToInt(srcPt.fX + filter->width()) + 1, maxX); |
for (int srcX = x0; srcX < x1 ; srcX++) { |
// Looking these up once instead of each loop is a ~15% speedup. |
- xWeights[srcX - x0] = s.getBitmapFilter()->lookupScalar((srcPt.fX - srcX)); |
+ xWeights[srcX - x0] = filter->lookupScalar((srcPt.fX - srcX)); |
} |
for (int srcY = y0; srcY < y1; srcY++) { |
- SkScalar yWeight = s.getBitmapFilter()->lookupScalar((srcPt.fY - srcY)); |
+ SkScalar yWeight = filter->lookupScalar((srcPt.fY - srcY)); |
for (int srcX = x0; srcX < x1 ; srcX++) { |
SkScalar xWeight = xWeights[srcX - x0]; |
SkScalar combined_weight = SkScalarMul(xWeight, yWeight); |
+ weight += combined_weight; |
SkPMColor c = *s.fBitmap->getAddr32(srcX, srcY); |
+ if (!c) { |
+ continue; |
+ } |
fr += combined_weight * SkGetPackedR32(c); |
reed1
2014/11/25 14:34:33
boy oh boy, this seems to beg for Sk4f ...
mtklein
2014/11/25 15:02:22
Yep, I will certainly try this out.
|
fg += combined_weight * SkGetPackedG32(c); |
fb += combined_weight * SkGetPackedB32(c); |
fa += combined_weight * SkGetPackedA32(c); |
- weight += combined_weight; |
} |
} |