diff options
author | 2014-01-27 22:41:45 +0000 | |
---|---|---|
committer | 2014-01-27 22:41:45 +0000 | |
commit | d1829151a5f5fb69faa50c326ed018376d117b3e (patch) | |
tree | e424d35b0b3d4be436b10ca361577e18a68702ef /src/effects/SkBlurMask.h | |
parent | 01260b2dbcc070006c0b960015e44ef83dcbaa56 (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.h | 35 |
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 |