| Index: src/gpu/SkGr.cpp
|
| diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
|
| index a1b379fe8c83dd562bd22cd793a67fd2e0e772aa..c4e2c1f93fd87b128a27206a3f0256f40fcc4456 100644
|
| --- a/src/gpu/SkGr.cpp
|
| +++ b/src/gpu/SkGr.cpp
|
| @@ -419,7 +419,7 @@ bool GrPixelConfig2ColorType(GrPixelConfig config, SkColorType* ctOut) {
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -void SkPaint2GrPaintNoShader(GrContext* context, const SkPaint& skPaint, GrColor grColor,
|
| +void SkPaint2GrPaintNoShader(GrContext* context, const SkPaint& skPaint, GrColor paintColor,
|
| bool constantColor, GrPaint* grPaint) {
|
|
|
| grPaint->setDither(skPaint.isDither());
|
| @@ -429,7 +429,7 @@ void SkPaint2GrPaintNoShader(GrContext* context, const SkPaint& skPaint, GrColor
|
| SkXfermode::Coeff dm;
|
|
|
| SkXfermode* mode = skPaint.getXfermode();
|
| - GrEffectRef* xferEffect = NULL;
|
| + GrEffect* xferEffect = NULL;
|
| if (SkXfermode::AsNewEffectOrCoeff(mode, &xferEffect, &sm, &dm)) {
|
| if (NULL != xferEffect) {
|
| grPaint->addColorEffect(xferEffect)->unref();
|
| @@ -445,7 +445,7 @@ void SkPaint2GrPaintNoShader(GrContext* context, const SkPaint& skPaint, GrColor
|
| grPaint->setBlendFunc(sk_blend_to_grblend(sm), sk_blend_to_grblend(dm));
|
|
|
| //set the color of the paint to the one of the parameter
|
| - grPaint->setColor(grColor);
|
| + grPaint->setColor(paintColor);
|
|
|
| SkColorFilter* colorFilter = skPaint.getColorFilter();
|
| if (NULL != colorFilter) {
|
| @@ -455,7 +455,7 @@ void SkPaint2GrPaintNoShader(GrContext* context, const SkPaint& skPaint, GrColor
|
| SkColor filtered = colorFilter->filterColor(skPaint.getColor());
|
| grPaint->setColor(SkColor2GrColor(filtered));
|
| } else {
|
| - SkAutoTUnref<GrEffectRef> effect(colorFilter->asNewEffect(context));
|
| + SkAutoTUnref<GrEffect> effect(colorFilter->asNewEffect(context));
|
| if (NULL != effect.get()) {
|
| grPaint->addColorEffect(effect);
|
| }
|
| @@ -476,7 +476,7 @@ void SkPaint2GrPaintNoShader(GrContext* context, const SkPaint& skPaint, GrColor
|
| target->config() == kBGRA_8888_GrPixelConfig) {
|
| // The dither flag is set and the target is likely
|
| // not going to be dithered by the GPU.
|
| - SkAutoTUnref<GrEffectRef> effect(GrDitherEffect::Create());
|
| + SkAutoTUnref<GrEffect> effect(GrDitherEffect::Create());
|
| if (NULL != effect.get()) {
|
| grPaint->addColorEffect(effect);
|
| grPaint->setDither(false);
|
| @@ -515,30 +515,29 @@ void SkPaint2GrPaintShader(GrContext* context, const SkPaint& skPaint,
|
| return;
|
| }
|
|
|
| - // SkShader::asNewEffect() may do offscreen rendering. Save off the current RT, clip, and
|
| - // matrix. We don't reset the matrix on the context because SkShader::asNewEffect may use
|
| - // GrContext::getMatrix() to know the transformation from local coords to device space.
|
| - GrColor grColor = SkColor2GrColor(skPaint.getColor());
|
| + GrColor paintColor = SkColor2GrColor(skPaint.getColor());
|
|
|
| // Start a new block here in order to preserve our context state after calling
|
| // asNewEffect(). Since these calls get passed back to the client, we don't really
|
| // want them messing around with the context.
|
| {
|
| + // SkShader::asNewEffect() may do offscreen rendering. Save off the current RT, clip, and
|
| + // matrix. We don't reset the matrix on the context because SkShader::asNewEffect may use
|
| + // GrContext::getMatrix() to know the transformation from local coords to device space.
|
| GrContext::AutoRenderTarget art(context, NULL);
|
| GrContext::AutoClip ac(context, GrContext::AutoClip::kWideOpen_InitialClip);
|
| AutoMatrix am(context);
|
|
|
| - // setup the shader as the first color effect on the paint
|
| - // the default grColor is the paint's color
|
| - GrEffectRef* grEffect = NULL;
|
| - if (shader->asNewEffect(context, skPaint, NULL, &grColor, &grEffect) && NULL != grEffect) {
|
| - SkAutoTUnref<GrEffectRef> effect(grEffect);
|
| - grPaint->addColorEffect(effect);
|
| + // Allow the shader to modify paintColor and also create an effect to be installed as
|
| + // the first color effect on the GrPaint.
|
| + GrEffect* effect = NULL;
|
| + if (shader->asNewEffect(context, skPaint, NULL, &paintColor, &effect) && NULL != effect) {
|
| + grPaint->addColorEffect(effect)->unref();
|
| constantColor = false;
|
| }
|
| }
|
|
|
| // The grcolor is automatically set when calling asneweffect.
|
| // If the shader can be seen as an effect it returns true and adds its effect to the grpaint.
|
| - SkPaint2GrPaintNoShader(context, skPaint, grColor, constantColor, grPaint);
|
| + SkPaint2GrPaintNoShader(context, skPaint, paintColor, constantColor, grPaint);
|
| }
|
|
|