Index: src/core/SkBlitter_ARGB32.cpp |
diff --git a/src/core/SkBlitter_ARGB32.cpp b/src/core/SkBlitter_ARGB32.cpp |
index 118a1d12f3e21d5cbd4ac96e7f970b569489b854..d4bec1bc086fe7e7c3fcc9f4bb0b4b183731edb8 100644 |
--- a/src/core/SkBlitter_ARGB32.cpp |
+++ b/src/core/SkBlitter_ARGB32.cpp |
@@ -275,16 +275,14 @@ |
} |
SkARGB32_Shader_Blitter::SkARGB32_Shader_Blitter(const SkBitmap& device, |
- const SkPaint& paint, SkShader::Context* shaderContext) |
- : INHERITED(device, paint, shaderContext) |
-{ |
+ const SkPaint& paint) : INHERITED(device, paint) { |
fBuffer = (SkPMColor*)sk_malloc_throw(device.width() * (sizeof(SkPMColor))); |
fXfermode = paint.getXfermode(); |
SkSafeRef(fXfermode); |
int flags = 0; |
- if (!(shaderContext->getFlags() & SkShader::kOpaqueAlpha_Flag)) { |
+ if (!(fShader->getFlags() & SkShader::kOpaqueAlpha_Flag)) { |
flags |= SkBlitRow::kSrcPixelAlpha_Flag32; |
} |
// we call this on the output from the shader |
@@ -294,7 +292,7 @@ |
fShadeDirectlyIntoDevice = false; |
if (fXfermode == NULL) { |
- if (shaderContext->getFlags() & SkShader::kOpaqueAlpha_Flag) { |
+ if (fShader->getFlags() & SkShader::kOpaqueAlpha_Flag) { |
fShadeDirectlyIntoDevice = true; |
} |
} else { |
@@ -307,7 +305,7 @@ |
} |
} |
- fConstInY = SkToBool(shaderContext->getFlags() & SkShader::kConstInY32_Flag); |
+ fConstInY = SkToBool(fShader->getFlags() & SkShader::kConstInY32_Flag); |
} |
SkARGB32_Shader_Blitter::~SkARGB32_Shader_Blitter() { |
@@ -321,10 +319,10 @@ |
uint32_t* device = fDevice.getAddr32(x, y); |
if (fShadeDirectlyIntoDevice) { |
- fShaderContext->shadeSpan(x, y, device, width); |
+ fShader->shadeSpan(x, y, device, width); |
} else { |
SkPMColor* span = fBuffer; |
- fShaderContext->shadeSpan(x, y, span, width); |
+ fShader->shadeSpan(x, y, span, width); |
if (fXfermode) { |
fXfermode->xfer32(device, span, width, NULL); |
} else { |
@@ -337,22 +335,22 @@ |
SkASSERT(x >= 0 && y >= 0 && |
x + width <= fDevice.width() && y + height <= fDevice.height()); |
- uint32_t* device = fDevice.getAddr32(x, y); |
- size_t deviceRB = fDevice.rowBytes(); |
- SkShader::Context* shaderContext = fShaderContext; |
- SkPMColor* span = fBuffer; |
+ uint32_t* device = fDevice.getAddr32(x, y); |
+ size_t deviceRB = fDevice.rowBytes(); |
+ SkShader* shader = fShader; |
+ SkPMColor* span = fBuffer; |
if (fConstInY) { |
if (fShadeDirectlyIntoDevice) { |
// shade the first row directly into the device |
- shaderContext->shadeSpan(x, y, device, width); |
+ fShader->shadeSpan(x, y, device, width); |
span = device; |
while (--height > 0) { |
device = (uint32_t*)((char*)device + deviceRB); |
memcpy(device, span, width << 2); |
} |
} else { |
- shaderContext->shadeSpan(x, y, span, width); |
+ fShader->shadeSpan(x, y, span, width); |
SkXfermode* xfer = fXfermode; |
if (xfer) { |
do { |
@@ -374,7 +372,7 @@ |
if (fShadeDirectlyIntoDevice) { |
void* ctx; |
- SkShader::Context::ShadeProc shadeProc = shaderContext->asAShadeProc(&ctx); |
+ SkShader::ShadeProc shadeProc = fShader->asAShadeProc(&ctx); |
if (shadeProc) { |
do { |
shadeProc(ctx, x, y, device, width); |
@@ -383,7 +381,7 @@ |
} while (--height > 0); |
} else { |
do { |
- shaderContext->shadeSpan(x, y, device, width); |
+ shader->shadeSpan(x, y, device, width); |
y += 1; |
device = (uint32_t*)((char*)device + deviceRB); |
} while (--height > 0); |
@@ -392,7 +390,7 @@ |
SkXfermode* xfer = fXfermode; |
if (xfer) { |
do { |
- shaderContext->shadeSpan(x, y, span, width); |
+ shader->shadeSpan(x, y, span, width); |
xfer->xfer32(device, span, width, NULL); |
y += 1; |
device = (uint32_t*)((char*)device + deviceRB); |
@@ -400,7 +398,7 @@ |
} else { |
SkBlitRow::Proc32 proc = fProc32; |
do { |
- shaderContext->shadeSpan(x, y, span, width); |
+ shader->shadeSpan(x, y, span, width); |
proc(device, span, width, 255); |
y += 1; |
device = (uint32_t*)((char*)device + deviceRB); |
@@ -411,9 +409,9 @@ |
void SkARGB32_Shader_Blitter::blitAntiH(int x, int y, const SkAlpha antialias[], |
const int16_t runs[]) { |
- SkPMColor* span = fBuffer; |
- uint32_t* device = fDevice.getAddr32(x, y); |
- SkShader::Context* shaderContext = fShaderContext; |
+ SkPMColor* span = fBuffer; |
+ uint32_t* device = fDevice.getAddr32(x, y); |
+ SkShader* shader = fShader; |
if (fXfermode && !fShadeDirectlyIntoDevice) { |
for (;;) { |
@@ -424,7 +422,7 @@ |
break; |
int aa = *antialias; |
if (aa) { |
- shaderContext->shadeSpan(x, y, span, count); |
+ shader->shadeSpan(x, y, span, count); |
if (aa == 255) { |
xfer->xfer32(device, span, count, NULL); |
} else { |
@@ -440,7 +438,7 @@ |
x += count; |
} |
} else if (fShadeDirectlyIntoDevice || |
- (shaderContext->getFlags() & SkShader::kOpaqueAlpha_Flag)) { |
+ (fShader->getFlags() & SkShader::kOpaqueAlpha_Flag)) { |
for (;;) { |
int count = *runs; |
if (count <= 0) { |
@@ -450,9 +448,9 @@ |
if (aa) { |
if (aa == 255) { |
// cool, have the shader draw right into the device |
- shaderContext->shadeSpan(x, y, device, count); |
+ shader->shadeSpan(x, y, device, count); |
} else { |
- shaderContext->shadeSpan(x, y, span, count); |
+ shader->shadeSpan(x, y, span, count); |
fProc32Blend(device, span, count, aa); |
} |
} |
@@ -469,7 +467,7 @@ |
} |
int aa = *antialias; |
if (aa) { |
- shaderContext->shadeSpan(x, y, span, count); |
+ fShader->shadeSpan(x, y, span, count); |
if (aa == 255) { |
fProc32(device, span, count, 255); |
} else { |
@@ -493,11 +491,10 @@ |
SkASSERT(mask.fBounds.contains(clip)); |
- SkShader::Context* shaderContext = fShaderContext; |
SkBlitMask::RowProc proc = NULL; |
if (!fXfermode) { |
unsigned flags = 0; |
- if (shaderContext->getFlags() & SkShader::kOpaqueAlpha_Flag) { |
+ if (fShader->getFlags() & SkShader::kOpaqueAlpha_Flag) { |
flags |= SkBlitMask::kSrcIsOpaque_RowFlag; |
} |
proc = SkBlitMask::RowFactory(SkBitmap::kARGB_8888_Config, mask.fFormat, |
@@ -518,13 +515,14 @@ |
const uint8_t* maskRow = (const uint8_t*)mask.getAddr(x, y); |
const size_t maskRB = mask.fRowBytes; |
+ SkShader* shader = fShader; |
SkPMColor* span = fBuffer; |
if (fXfermode) { |
SkASSERT(SkMask::kA8_Format == mask.fFormat); |
SkXfermode* xfer = fXfermode; |
do { |
- shaderContext->shadeSpan(x, y, span, width); |
+ shader->shadeSpan(x, y, span, width); |
xfer->xfer32((SkPMColor*)dstRow, span, width, maskRow); |
dstRow += dstRB; |
maskRow += maskRB; |
@@ -532,7 +530,7 @@ |
} while (--height > 0); |
} else { |
do { |
- shaderContext->shadeSpan(x, y, span, width); |
+ shader->shadeSpan(x, y, span, width); |
proc(dstRow, maskRow, span, width); |
dstRow += dstRB; |
maskRow += maskRB; |
@@ -544,13 +542,13 @@ |
void SkARGB32_Shader_Blitter::blitV(int x, int y, int height, SkAlpha alpha) { |
SkASSERT(x >= 0 && y >= 0 && y + height <= fDevice.height()); |
- uint32_t* device = fDevice.getAddr32(x, y); |
- size_t deviceRB = fDevice.rowBytes(); |
- SkShader::Context* shaderContext = fShaderContext; |
+ uint32_t* device = fDevice.getAddr32(x, y); |
+ size_t deviceRB = fDevice.rowBytes(); |
+ SkShader* shader = fShader; |
if (fConstInY) { |
SkPMColor c; |
- shaderContext->shadeSpan(x, y, &c, 1); |
+ fShader->shadeSpan(x, y, &c, 1); |
if (fShadeDirectlyIntoDevice) { |
if (255 == alpha) { |
@@ -584,7 +582,7 @@ |
if (fShadeDirectlyIntoDevice) { |
void* ctx; |
- SkShader::Context::ShadeProc shadeProc = shaderContext->asAShadeProc(&ctx); |
+ SkShader::ShadeProc shadeProc = fShader->asAShadeProc(&ctx); |
if (255 == alpha) { |
if (shadeProc) { |
do { |
@@ -594,7 +592,7 @@ |
} while (--height > 0); |
} else { |
do { |
- shaderContext->shadeSpan(x, y, device, 1); |
+ shader->shadeSpan(x, y, device, 1); |
y += 1; |
device = (uint32_t*)((char*)device + deviceRB); |
} while (--height > 0); |
@@ -610,7 +608,7 @@ |
} while (--height > 0); |
} else { |
do { |
- shaderContext->shadeSpan(x, y, &c, 1); |
+ shader->shadeSpan(x, y, &c, 1); |
*device = SkFourByteInterp(c, *device, alpha); |
y += 1; |
device = (uint32_t*)((char*)device + deviceRB); |
@@ -622,7 +620,7 @@ |
SkXfermode* xfer = fXfermode; |
if (xfer) { |
do { |
- shaderContext->shadeSpan(x, y, span, 1); |
+ shader->shadeSpan(x, y, span, 1); |
xfer->xfer32(device, span, 1, &alpha); |
y += 1; |
device = (uint32_t*)((char*)device + deviceRB); |
@@ -630,7 +628,7 @@ |
} else { |
SkBlitRow::Proc32 proc = (255 == alpha) ? fProc32 : fProc32Blend; |
do { |
- shaderContext->shadeSpan(x, y, span, 1); |
+ shader->shadeSpan(x, y, span, 1); |
proc(device, span, 1, alpha); |
y += 1; |
device = (uint32_t*)((char*)device + deviceRB); |