Make GrPaint have a variable sized array of color and coverage stages rather than a fixed size.
R=robertphillips@google.com, jvanverth@google.com
Author: bsalomon@google.com
Review URL: https://chromiumcodereview.appspot.com/18686007
git-svn-id: http://skia.googlecode.com/svn/trunk@10062 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/effects/SkBicubicImageFilter.cpp b/src/effects/SkBicubicImageFilter.cpp
index a97a768..5161f6d 100644
--- a/src/effects/SkBicubicImageFilter.cpp
+++ b/src/effects/SkBicubicImageFilter.cpp
@@ -365,7 +365,7 @@
}
GrContext::AutoRenderTarget art(context, dst->asRenderTarget());
GrPaint paint;
- paint.colorStage(0)->setEffect(GrBicubicEffect::Create(srcTexture, fCoefficients))->unref();
+ paint.addColorEffect(GrBicubicEffect::Create(srcTexture, fCoefficients))->unref();
SkRect srcRect;
srcBM.getBounds(&srcRect);
context->drawRectToRect(paint, dstRect, srcRect);
diff --git a/src/effects/SkBlendImageFilter.cpp b/src/effects/SkBlendImageFilter.cpp
index 1c40ca8..9aae35a 100644
--- a/src/effects/SkBlendImageFilter.cpp
+++ b/src/effects/SkBlendImageFilter.cpp
@@ -194,8 +194,9 @@
GrContext::AutoRenderTarget art(context, dst->asRenderTarget());
GrPaint paint;
- paint.colorStage(0)->setEffect(
- GrBlendEffect::Create(fMode, foreground, foregroundOffset, background, backgroundOffset))->unref();
+ paint.addColorEffect(GrBlendEffect::Create(fMode,
+ foreground, foregroundOffset,
+ background, backgroundOffset))->unref();
SkRect srcRect;
src.getBounds(&srcRect);
context->drawRect(paint, srcRect);
diff --git a/src/effects/SkBlurMaskFilter.cpp b/src/effects/SkBlurMaskFilter.cpp
index 85176d6..66a07c4 100644
--- a/src/effects/SkBlurMaskFilter.cpp
+++ b/src/effects/SkBlurMaskFilter.cpp
@@ -423,8 +423,7 @@
matrix.setIDiv(src->width(), src->height());
// Blend pathTexture over blurTexture.
GrContext::AutoRenderTarget art(context, (*result)->asRenderTarget());
- paint.colorStage(0)->setEffect(
- GrSimpleTextureEffect::Create(src, matrix))->unref();
+ paint.addColorEffect(GrSimpleTextureEffect::Create(src, matrix))->unref();
if (SkBlurMaskFilter::kInner_BlurStyle == fBlurStyle) {
// inner: dst = dst * src
paint.setBlendFunc(kDC_GrBlendCoeff, kZero_GrBlendCoeff);
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index 8d287b2..7b64d1d 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -305,7 +305,7 @@
GrContext::AutoRenderTarget art(context, dst->asRenderTarget());
GrPaint paint;
- paint.colorStage(0)->setEffect(
+ paint.addColorEffect(
GrDisplacementMapEffect::Create(fXChannelSelector,
fYChannelSelector,
fScale,
diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
index cb17c90..4783abd 100644
--- a/src/effects/SkMorphologyImageFilter.cpp
+++ b/src/effects/SkMorphologyImageFilter.cpp
@@ -452,10 +452,10 @@
GrMorphologyEffect::MorphologyType morphType,
Gr1DKernelEffect::Direction direction) {
GrPaint paint;
- paint.colorStage(0)->setEffect(GrMorphologyEffect::Create(texture,
- direction,
- radius,
- morphType))->unref();
+ paint.addColorEffect(GrMorphologyEffect::Create(texture,
+ direction,
+ radius,
+ morphType))->unref();
context->drawRect(paint, SkRect::MakeFromIRect(rect));
}
diff --git a/src/effects/SkXfermodeImageFilter.cpp b/src/effects/SkXfermodeImageFilter.cpp
index a318ceb..3df59a8 100644
--- a/src/effects/SkXfermodeImageFilter.cpp
+++ b/src/effects/SkXfermodeImageFilter.cpp
@@ -119,23 +119,23 @@
SkIntToScalar(backgroundOffset.fY-foregroundOffset.fY));
- GrPaint paint;
SkRect srcRect;
src.getBounds(&srcRect);
if (NULL != xferEffect) {
- paint.colorStage(0)->setEffect(
- GrSimpleTextureEffect::Create(foregroundTex, foregroundMatrix))->unref();
- paint.colorStage(1)->setEffect(xferEffect)->unref();
+ GrPaint paint;
+ paint.addColorTextureEffect(foregroundTex, foregroundMatrix);
+ paint.addColorEffect(xferEffect)->unref();
context->drawRect(paint, srcRect);
} else {
+ GrPaint backgroundPaint;
SkMatrix backgroundMatrix = GrEffect::MakeDivByTextureWHMatrix(backgroundTex);
- paint.colorStage(0)->setEffect(
- GrSimpleTextureEffect::Create(backgroundTex, backgroundMatrix))->unref();
- context->drawRect(paint, srcRect);
- paint.setBlendFunc(sk_blend_to_grblend(sm), sk_blend_to_grblend(dm));
- paint.colorStage(0)->setEffect(
- GrSimpleTextureEffect::Create(foregroundTex, foregroundMatrix))->unref();
- context->drawRect(paint, srcRect);
+ backgroundPaint.addColorTextureEffect(backgroundTex, backgroundMatrix);
+ context->drawRect(backgroundPaint, srcRect);
+
+ GrPaint foregroundPaint;
+ foregroundPaint.setBlendFunc(sk_blend_to_grblend(sm), sk_blend_to_grblend(dm));
+ foregroundPaint.addColorTextureEffect(foregroundTex, foregroundMatrix);
+ context->drawRect(foregroundPaint, srcRect);
}
offset->fX += backgroundOffset.fX;
offset->fY += backgroundOffset.fY;