aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/SkBlurMask.h
diff options
context:
space:
mode:
authorGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-01-27 22:41:45 +0000
committerGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-01-27 22:41:45 +0000
commitd1829151a5f5fb69faa50c326ed018376d117b3e (patch)
treee424d35b0b3d4be436b10ca361577e18a68702ef /src/effects/SkBlurMask.h
parent01260b2dbcc070006c0b960015e44ef83dcbaa56 (diff)
Perform the same analytic blur calculation on the GPU that we do on the CPU. Results in significant performance gains when using Ganesh to render drop shadows in Chrome.
BUG= R=bsalomon@google.com, reed@google.com Author: humper@google.com Review URL: https://codereview.chromium.org/119343003 git-svn-id: http://skia.googlecode.com/svn/trunk@13210 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/effects/SkBlurMask.h')
-rw-r--r--src/effects/SkBlurMask.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/effects/SkBlurMask.h b/src/effects/SkBlurMask.h
index e0b8d54ce1..f95c110c90 100644
--- a/src/effects/SkBlurMask.h
+++ b/src/effects/SkBlurMask.h
@@ -62,6 +62,41 @@ public:
SkIPoint* margin = NULL);
static SkScalar ConvertRadiusToSigma(SkScalar radius);
+
+ /* Helper functions for analytic rectangle blurs */
+
+ /** Look up the intensity of the (one dimnensional) blurred half-plane.
+ @param profile The precomputed 1D blur profile; memory allocated by and managed by
+ ComputeBlurProfile below.
+ @param loc the location to look up; The lookup will clamp invalid inputs, but
+ meaningful data are available between 0 and blurred_width
+ @param blurred_width The width of the final, blurred rectangle
+ @param sharp_width The width of the original, unblurred rectangle.
+ */
+ static uint8_t ProfileLookup(const uint8_t* profile, int loc, int blurred_width, int sharp_width);
+
+ /** Allocate memory for and populate the profile of a 1D blurred halfplane. The caller
+ must free the memory. The amount of memory allocated will be exactly 6*sigma bytes.
+ @param sigma The standard deviation of the gaussian blur kernel
+ @param profile_out The location to store the allocated profile curve
+ */
+
+ static void ComputeBlurProfile(SkScalar sigma, uint8_t** profile_out);
+
+ /** Compute an entire scanline of a blurred step function. This is a 1D helper that
+ will produce both the horizontal and vertical profiles of the blurry rectangle.
+ @param pixels Location to store the resulting pixel data; allocated and managed by caller
+ @param profile Precomputed blur profile computed by ComputeBlurProfile above.
+ @param width Size of the pixels array.
+ @param sigma Standard deviation of the gaussian blur kernel used to compute the profile;
+ this implicitly gives the size of the pixels array.
+ */
+
+ static void ComputeBlurredScanline(uint8_t* pixels, const uint8_t* profile,
+ unsigned int width, SkScalar sigma);
+
+
+
};
#endif