Index: src/core/SkBlitter_ARGB32.cpp |
diff --git a/src/core/SkBlitter_ARGB32.cpp b/src/core/SkBlitter_ARGB32.cpp |
index d4bec1bc086fe7e7c3fcc9f4bb0b4b183731edb8..187961e7cdabf94d2282f3baa78ba485a100aef3 100644 |
--- a/src/core/SkBlitter_ARGB32.cpp |
+++ b/src/core/SkBlitter_ARGB32.cpp |
@@ -275,7 +275,9 @@ static void blend_srcmode(SkPMColor* SK_RESTRICT device, |
} |
SkARGB32_Shader_Blitter::SkARGB32_Shader_Blitter(const SkBitmap& device, |
- const SkPaint& paint) : INHERITED(device, paint) { |
+ const SkPaint& paint, SkShader::Context* context) |
+ : INHERITED(device, paint, context) |
+{ |
fBuffer = (SkPMColor*)sk_malloc_throw(device.width() * (sizeof(SkPMColor))); |
fXfermode = paint.getXfermode(); |
@@ -319,10 +321,10 @@ void SkARGB32_Shader_Blitter::blitH(int x, int y, int width) { |
uint32_t* device = fDevice.getAddr32(x, y); |
if (fShadeDirectlyIntoDevice) { |
- fShader->shadeSpan(x, y, device, width); |
+ fShader->shadeSpan(fContext, x, y, device, width); |
} else { |
SkPMColor* span = fBuffer; |
- fShader->shadeSpan(x, y, span, width); |
+ fShader->shadeSpan(fContext, x, y, span, width); |
if (fXfermode) { |
fXfermode->xfer32(device, span, width, NULL); |
} else { |
@@ -343,14 +345,14 @@ void SkARGB32_Shader_Blitter::blitRect(int x, int y, int width, int height) { |
if (fConstInY) { |
if (fShadeDirectlyIntoDevice) { |
// shade the first row directly into the device |
- fShader->shadeSpan(x, y, device, width); |
+ fShader->shadeSpan(fContext, x, y, device, width); |
span = device; |
while (--height > 0) { |
device = (uint32_t*)((char*)device + deviceRB); |
memcpy(device, span, width << 2); |
} |
} else { |
- fShader->shadeSpan(x, y, span, width); |
+ fShader->shadeSpan(fContext, x, y, span, width); |
SkXfermode* xfer = fXfermode; |
if (xfer) { |
do { |
@@ -381,7 +383,7 @@ void SkARGB32_Shader_Blitter::blitRect(int x, int y, int width, int height) { |
} while (--height > 0); |
} else { |
do { |
- shader->shadeSpan(x, y, device, width); |
+ shader->shadeSpan(fContext, x, y, device, width); |
y += 1; |
device = (uint32_t*)((char*)device + deviceRB); |
} while (--height > 0); |
@@ -390,7 +392,7 @@ void SkARGB32_Shader_Blitter::blitRect(int x, int y, int width, int height) { |
SkXfermode* xfer = fXfermode; |
if (xfer) { |
do { |
- shader->shadeSpan(x, y, span, width); |
+ shader->shadeSpan(fContext, x, y, span, width); |
xfer->xfer32(device, span, width, NULL); |
y += 1; |
device = (uint32_t*)((char*)device + deviceRB); |
@@ -398,7 +400,7 @@ void SkARGB32_Shader_Blitter::blitRect(int x, int y, int width, int height) { |
} else { |
SkBlitRow::Proc32 proc = fProc32; |
do { |
- shader->shadeSpan(x, y, span, width); |
+ shader->shadeSpan(fContext, x, y, span, width); |
proc(device, span, width, 255); |
y += 1; |
device = (uint32_t*)((char*)device + deviceRB); |
@@ -422,7 +424,7 @@ void SkARGB32_Shader_Blitter::blitAntiH(int x, int y, const SkAlpha antialias[], |
break; |
int aa = *antialias; |
if (aa) { |
- shader->shadeSpan(x, y, span, count); |
+ shader->shadeSpan(fContext, x, y, span, count); |
if (aa == 255) { |
xfer->xfer32(device, span, count, NULL); |
} else { |
@@ -448,9 +450,9 @@ void SkARGB32_Shader_Blitter::blitAntiH(int x, int y, const SkAlpha antialias[], |
if (aa) { |
if (aa == 255) { |
// cool, have the shader draw right into the device |
- shader->shadeSpan(x, y, device, count); |
+ shader->shadeSpan(fContext, x, y, device, count); |
} else { |
- shader->shadeSpan(x, y, span, count); |
+ shader->shadeSpan(fContext, x, y, span, count); |
fProc32Blend(device, span, count, aa); |
} |
} |
@@ -467,7 +469,7 @@ void SkARGB32_Shader_Blitter::blitAntiH(int x, int y, const SkAlpha antialias[], |
} |
int aa = *antialias; |
if (aa) { |
- fShader->shadeSpan(x, y, span, count); |
+ fShader->shadeSpan(fContext, x, y, span, count); |
if (aa == 255) { |
fProc32(device, span, count, 255); |
} else { |
@@ -522,7 +524,7 @@ void SkARGB32_Shader_Blitter::blitMask(const SkMask& mask, const SkIRect& clip) |
SkASSERT(SkMask::kA8_Format == mask.fFormat); |
SkXfermode* xfer = fXfermode; |
do { |
- shader->shadeSpan(x, y, span, width); |
+ shader->shadeSpan(fContext, x, y, span, width); |
xfer->xfer32((SkPMColor*)dstRow, span, width, maskRow); |
dstRow += dstRB; |
maskRow += maskRB; |
@@ -530,7 +532,7 @@ void SkARGB32_Shader_Blitter::blitMask(const SkMask& mask, const SkIRect& clip) |
} while (--height > 0); |
} else { |
do { |
- shader->shadeSpan(x, y, span, width); |
+ shader->shadeSpan(fContext, x, y, span, width); |
proc(dstRow, maskRow, span, width); |
dstRow += dstRB; |
maskRow += maskRB; |
@@ -548,7 +550,7 @@ void SkARGB32_Shader_Blitter::blitV(int x, int y, int height, SkAlpha alpha) { |
if (fConstInY) { |
SkPMColor c; |
- fShader->shadeSpan(x, y, &c, 1); |
+ fShader->shadeSpan(fContext, x, y, &c, 1); |
if (fShadeDirectlyIntoDevice) { |
if (255 == alpha) { |
@@ -592,7 +594,7 @@ void SkARGB32_Shader_Blitter::blitV(int x, int y, int height, SkAlpha alpha) { |
} while (--height > 0); |
} else { |
do { |
- shader->shadeSpan(x, y, device, 1); |
+ shader->shadeSpan(fContext, x, y, device, 1); |
y += 1; |
device = (uint32_t*)((char*)device + deviceRB); |
} while (--height > 0); |
@@ -608,7 +610,7 @@ void SkARGB32_Shader_Blitter::blitV(int x, int y, int height, SkAlpha alpha) { |
} while (--height > 0); |
} else { |
do { |
- shader->shadeSpan(x, y, &c, 1); |
+ shader->shadeSpan(fContext, x, y, &c, 1); |
*device = SkFourByteInterp(c, *device, alpha); |
y += 1; |
device = (uint32_t*)((char*)device + deviceRB); |
@@ -620,7 +622,7 @@ void SkARGB32_Shader_Blitter::blitV(int x, int y, int height, SkAlpha alpha) { |
SkXfermode* xfer = fXfermode; |
if (xfer) { |
do { |
- shader->shadeSpan(x, y, span, 1); |
+ shader->shadeSpan(fContext, x, y, span, 1); |
xfer->xfer32(device, span, 1, &alpha); |
y += 1; |
device = (uint32_t*)((char*)device + deviceRB); |
@@ -628,7 +630,7 @@ void SkARGB32_Shader_Blitter::blitV(int x, int y, int height, SkAlpha alpha) { |
} else { |
SkBlitRow::Proc32 proc = (255 == alpha) ? fProc32 : fProc32Blend; |
do { |
- shader->shadeSpan(x, y, span, 1); |
+ shader->shadeSpan(fContext, x, y, span, 1); |
proc(device, span, 1, alpha); |
y += 1; |
device = (uint32_t*)((char*)device + deviceRB); |