aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects
diff options
context:
space:
mode:
authorGravatar rileya@google.com <rileya@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-07-03 13:43:35 +0000
committerGravatar rileya@google.com <rileya@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-07-03 13:43:35 +0000
commit3e33258cd15faae4a2906ddcc586e4008ee20e68 (patch)
treef58144c5d7a953f095a2288a7aaffcdb5985895d /src/effects
parentdbc5d28979bef1c92aa79e0dc1b5d27a41de5c9a (diff)
Added GPU implementation of 2-point conical gradient.
Review URL: https://codereview.appspot.com/6354062 git-svn-id: http://skia.googlecode.com/svn/trunk@4442 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/effects')
-rw-r--r--src/effects/SkGradientShader.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/effects/SkGradientShader.cpp b/src/effects/SkGradientShader.cpp
index b0badc5127..559e711cfe 100644
--- a/src/effects/SkGradientShader.cpp
+++ b/src/effects/SkGradientShader.cpp
@@ -2304,6 +2304,47 @@ public:
return true;
}
+ virtual BitmapType asABitmap(SkBitmap* bitmap,
+ SkMatrix* matrix,
+ TileMode* xy,
+ SkScalar* twoPointRadialParams) const {
+
+ SkPoint diff = fCenter2 - fCenter1;
+ SkScalar diffRadius = fRadius2 - fRadius1;
+ SkScalar startRadius = fRadius1;
+ SkScalar diffLen = 0;
+
+ if (bitmap) {
+ this->commonAsABitmap(bitmap);
+ }
+ if (matrix || twoPointRadialParams) {
+ diffLen = diff.length();
+ }
+ if (matrix) {
+ if (diffLen) {
+ SkScalar invDiffLen = SkScalarInvert(diffLen);
+ // rotate to align circle centers with the x-axis
+ matrix->setSinCos(-SkScalarMul(invDiffLen, diff.fY),
+ SkScalarMul(invDiffLen, diff.fX));
+ } else {
+ matrix->reset();
+ }
+ matrix->preTranslate(-fCenter1.fX, -fCenter1.fY);
+ }
+ if (xy) {
+ xy[0] = fTileMode;
+ xy[1] = kClamp_TileMode;
+ }
+ if (NULL != twoPointRadialParams) {
+ twoPointRadialParams[0] = diffLen;
+ twoPointRadialParams[1] = startRadius;
+ twoPointRadialParams[2] = diffRadius;
+ }
+
+ return kTwoPointConical_BitmapType;
+ }
+
+
SkShader::GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE {
if (info) {
commonAsAGradient(info);