Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2011 The Android Open Source Project | 2 * Copyright 2011 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 "SkBitmap.h" | 8 #include "SkBitmap.h" |
| 9 #include "SkBlurImageFilter.h" | 9 #include "SkBlurImageFilter.h" |
| 10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 186 temp.setConfig(dst->config(), dst->width(), dst->height()); | 186 temp.setConfig(dst->config(), dst->width(), dst->height()); |
| 187 if (!temp.allocPixels()) { | 187 if (!temp.allocPixels()) { |
| 188 return false; | 188 return false; |
| 189 } | 189 } |
| 190 | 190 |
| 191 const SkPMColor* s = src.getAddr32(srcBounds.left(), srcBounds.top()); | 191 const SkPMColor* s = src.getAddr32(srcBounds.left(), srcBounds.top()); |
| 192 SkPMColor* t = temp.getAddr32(0, 0); | 192 SkPMColor* t = temp.getAddr32(0, 0); |
| 193 SkPMColor* d = dst->getAddr32(0, 0); | 193 SkPMColor* d = dst->getAddr32(0, 0); |
| 194 int w = dstBounds.width(), h = dstBounds.height(); | 194 int w = dstBounds.width(), h = dstBounds.height(); |
| 195 int sw = src.rowBytesAsPixels(); | 195 int sw = src.rowBytesAsPixels(); |
| 196 SkBoxBlurProc boxBlurX, boxBlurY, boxBlurXY; | 196 SkBoxBlurProc boxBlurX, boxBlurY, boxBlurXY, boxBlurYX; |
| 197 if (!SkBoxBlurGetPlatformProcs(&boxBlurX, &boxBlurY, &boxBlurXY)) { | 197 if (!SkBoxBlurGetPlatformProcs(&boxBlurX, &boxBlurY, &boxBlurXY, &boxBlurYX) ) { |
| 198 boxBlurX = boxBlur<kX, kX>; | 198 boxBlurX = boxBlur<kX, kX>; |
| 199 boxBlurY = boxBlur<kY, kY>; | 199 boxBlurY = boxBlur<kY, kY>; |
| 200 boxBlurXY = boxBlur<kX, kY>; | 200 boxBlurXY = boxBlur<kX, kY>; |
| 201 boxBlurYX = boxBlur<kY, kX>; | |
| 201 } | 202 } |
| 202 | 203 |
| 203 if (kernelSizeX > 0 && kernelSizeY > 0) { | 204 if (kernelSizeX > 0 && kernelSizeY > 0) { |
| 204 #ifndef SK_DISABLE_BLUR_DIVISION_OPTIMIZATION | 205 #ifndef SK_DISABLE_BLUR_DIVISION_OPTIMIZATION |
|
mtklein
2013/11/11 17:43:23
Either the new y-only transposed version needs to
| |
| 205 boxBlurX(s, sw, t, kernelSizeX, lowOffsetX, highOffsetX, w, h); | 206 boxBlurX(s, sw, t, kernelSizeX, lowOffsetX, highOffsetX, w, h); |
| 206 boxBlurX(t, w, d, kernelSizeX, highOffsetX, lowOffsetX, w, h); | 207 boxBlurX(t, w, d, kernelSizeX, highOffsetX, lowOffsetX, w, h); |
| 207 boxBlurXY(d, w, t, kernelSizeX3, highOffsetX, highOffsetX, w, h); | 208 boxBlurXY(d, w, t, kernelSizeX3, highOffsetX, highOffsetX, w, h); |
| 208 boxBlurX(t, h, d, kernelSizeY, lowOffsetY, highOffsetY, h, w); | 209 boxBlurX(t, h, d, kernelSizeY, lowOffsetY, highOffsetY, h, w); |
| 209 boxBlurX(d, h, t, kernelSizeY, highOffsetY, lowOffsetY, h, w); | 210 boxBlurX(d, h, t, kernelSizeY, highOffsetY, lowOffsetY, h, w); |
| 210 boxBlurXY(t, h, d, kernelSizeY3, highOffsetY, highOffsetY, h, w); | 211 boxBlurXY(t, h, d, kernelSizeY3, highOffsetY, highOffsetY, h, w); |
| 211 #else | 212 #else |
| 212 boxBlurX(s, sw, t, kernelSizeX, lowOffsetX, highOffsetX, w, h); | 213 boxBlurX(s, sw, t, kernelSizeX, lowOffsetX, highOffsetX, w, h); |
| 213 boxBlurY(t, w, d, kernelSizeY, lowOffsetY, highOffsetY, h, w); | 214 boxBlurY(t, w, d, kernelSizeY, lowOffsetY, highOffsetY, h, w); |
| 214 boxBlurX(d, w, t, kernelSizeX, highOffsetX, lowOffsetX, w, h); | 215 boxBlurX(d, w, t, kernelSizeX, highOffsetX, lowOffsetX, w, h); |
| 215 boxBlurY(t, w, d, kernelSizeY, highOffsetY, lowOffsetY, h, w); | 216 boxBlurY(t, w, d, kernelSizeY, highOffsetY, lowOffsetY, h, w); |
| 216 boxBlurX(d, w, t, kernelSizeX3, highOffsetX, highOffsetX, w, h); | 217 boxBlurX(d, w, t, kernelSizeX3, highOffsetX, highOffsetX, w, h); |
| 217 boxBlurY(t, w, d, kernelSizeY3, highOffsetY, highOffsetY, h, w); | 218 boxBlurY(t, w, d, kernelSizeY3, highOffsetY, highOffsetY, h, w); |
| 218 #endif | 219 #endif |
| 219 } else if (kernelSizeX > 0) { | 220 } else if (kernelSizeX > 0) { |
| 220 boxBlurX(s, sw, d, kernelSizeX, lowOffsetX, highOffsetX, w, h); | 221 boxBlurX(s, sw, d, kernelSizeX, lowOffsetX, highOffsetX, w, h); |
| 221 boxBlurX(d, w, t, kernelSizeX, highOffsetX, lowOffsetX, w, h); | 222 boxBlurX(d, w, t, kernelSizeX, highOffsetX, lowOffsetX, w, h); |
| 222 boxBlurX(t, w, d, kernelSizeX3, highOffsetX, highOffsetX, w, h); | 223 boxBlurX(t, w, d, kernelSizeX3, highOffsetX, highOffsetX, w, h); |
| 223 } else if (kernelSizeY > 0) { | 224 } else if (kernelSizeY > 0) { |
| 224 boxBlurY(s, sw, d, kernelSizeY, lowOffsetY, highOffsetY, h, w); | 225 boxBlurYX(s, sw, d, kernelSizeY, lowOffsetY, highOffsetY, h, w); |
| 225 boxBlurY(d, w, t, kernelSizeY, highOffsetY, lowOffsetY, h, w); | 226 boxBlurX(d, h, t, kernelSizeY, highOffsetY, lowOffsetY, h, w); |
| 226 boxBlurY(t, w, d, kernelSizeY3, highOffsetY, highOffsetY, h, w); | 227 boxBlurXY(t, h, d, kernelSizeY3, highOffsetY, highOffsetY, h, w); |
| 227 } | 228 } |
| 228 offset->fX += srcBounds.fLeft; | 229 offset->fX += srcBounds.fLeft; |
| 229 offset->fY += srcBounds.fTop; | 230 offset->fY += srcBounds.fTop; |
| 230 return true; | 231 return true; |
| 231 } | 232 } |
| 232 | 233 |
| 233 bool SkBlurImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm, | 234 bool SkBlurImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm, |
| 234 SkBitmap* result, SkIPoint* offset) { | 235 SkBitmap* result, SkIPoint* offset) { |
| 235 #if SK_SUPPORT_GPU | 236 #if SK_SUPPORT_GPU |
| 236 SkBitmap input; | 237 SkBitmap input; |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 251 fSigma.width(), | 252 fSigma.width(), |
| 252 fSigma.height())); | 253 fSigma.height())); |
| 253 offset->fX += rect.fLeft; | 254 offset->fX += rect.fLeft; |
| 254 offset->fY += rect.fTop; | 255 offset->fY += rect.fTop; |
| 255 return SkImageFilterUtils::WrapTexture(tex, rect.width(), rect.height(), res ult); | 256 return SkImageFilterUtils::WrapTexture(tex, rect.width(), rect.height(), res ult); |
| 256 #else | 257 #else |
| 257 SkDEBUGFAIL("Should not call in GPU-less build"); | 258 SkDEBUGFAIL("Should not call in GPU-less build"); |
| 258 return false; | 259 return false; |
| 259 #endif | 260 #endif |
| 260 } | 261 } |
| OLD | NEW |