Chromium Code Reviews| Index: src/core/SkBlitter_A8.cpp |
| diff --git a/src/core/SkBlitter_A8.cpp b/src/core/SkBlitter_A8.cpp |
| index 983a226e3460a755bee4f80a287f3eb1b788eb41..04e8ccf134d503b991438b7676053a2ae157f6ef 100644 |
| --- a/src/core/SkBlitter_A8.cpp |
| +++ b/src/core/SkBlitter_A8.cpp |
| @@ -228,11 +228,12 @@ void SkA8_Blitter::blitRect(int x, int y, int width, int height) { |
| /////////////////////////////////////////////////////////////////////// |
| -SkA8_Shader_Blitter::SkA8_Shader_Blitter(const SkBitmap& device, const SkPaint& paint) |
| - : INHERITED(device, paint) { |
| +SkA8_Shader_Blitter::SkA8_Shader_Blitter(const SkBitmap& device, const SkPaint& paint, |
| + SkShader::Context* shaderContext) |
| + : INHERITED(device, paint, shaderContext) { |
| if ((fXfermode = paint.getXfermode()) != NULL) { |
| fXfermode->ref(); |
| - SkASSERT(fShader); |
| + SkASSERT(fShaderContext); |
| } |
| int width = device.width(); |
| @@ -251,12 +252,12 @@ void SkA8_Shader_Blitter::blitH(int x, int y, int width) { |
| uint8_t* device = fDevice.getAddr8(x, y); |
| - if ((fShader->getFlags() & SkShader::kOpaqueAlpha_Flag) && !fXfermode) { |
| + if ((fShaderContext->getFlags() & SkShader::kOpaqueAlpha_Flag) && !fXfermode) { |
| memset(device, 0xFF, width); |
| } else { |
| SkPMColor* span = fBuffer; |
| - fShader->shadeSpan(x, y, span, width); |
| + fShaderContext->shadeSpan(x, y, span, width); |
| if (fXfermode) { |
| fXfermode->xferA8(device, span, width, NULL); |
| } else { |
| @@ -282,12 +283,12 @@ static inline uint8_t aa_blend8(SkPMColor src, U8CPU da, int aa) { |
| void SkA8_Shader_Blitter::blitAntiH(int x, int y, const SkAlpha antialias[], |
| const int16_t runs[]) { |
| - SkShader* shader = fShader; |
| + SkShader::Context* shaderContext = fShaderContext; |
| SkXfermode* mode = fXfermode; |
| uint8_t* aaExpand = fAAExpand; |
| SkPMColor* span = fBuffer; |
| uint8_t* device = fDevice.getAddr8(x, y); |
| - int opaque = fShader->getFlags() & SkShader::kOpaqueAlpha_Flag; |
| + int opaque = fShaderContext->getFlags() & SkShader::kOpaqueAlpha_Flag; |
|
scroggo
2014/03/24 21:24:46
shaderContext?
|
| for (;;) { |
| int count = *runs; |
| @@ -299,7 +300,7 @@ void SkA8_Shader_Blitter::blitAntiH(int x, int y, const SkAlpha antialias[], |
| if (opaque && aa == 255 && mode == NULL) { |
| memset(device, 0xFF, count); |
| } else { |
| - shader->shadeSpan(x, y, span, count); |
| + shaderContext->shadeSpan(x, y, span, count); |
| if (mode) { |
| memset(aaExpand, aa, count); |
| mode->xferA8(device, span, count, aaExpand); |
| @@ -333,7 +334,7 @@ void SkA8_Shader_Blitter::blitMask(const SkMask& mask, const SkIRect& clip) { |
| SkPMColor* span = fBuffer; |
| while (--height >= 0) { |
| - fShader->shadeSpan(x, y, span, width); |
| + fShaderContext->shadeSpan(x, y, span, width); |
|
scroggo
2014/03/24 21:24:46
I wonder why we chose not to cache fShader here. W
|
| if (fXfermode) { |
| fXfermode->xferA8(device, span, width, alpha); |
| } else { |