aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/SkTransparentShader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/effects/SkTransparentShader.cpp')
-rw-r--r--src/effects/SkTransparentShader.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/effects/SkTransparentShader.cpp b/src/effects/SkTransparentShader.cpp
index c6caba3165..6e68b5e9ef 100644
--- a/src/effects/SkTransparentShader.cpp
+++ b/src/effects/SkTransparentShader.cpp
@@ -53,7 +53,10 @@ void SkTransparentShader::shadeSpan(int x, int y, SkPMColor span[], int count) {
switch (fDevice->getConfig()) {
case SkBitmap::kARGB_8888_Config:
if (scale == 256) {
- memcpy(span, fDevice->getAddr32(x, y), count * sizeof(SkPMColor));
+ SkPMColor* src = fDevice->getAddr32(x, y);
+ if (src != span) {
+ memcpy(span, src, count * sizeof(SkPMColor));
+ }
} else {
const SkPMColor* src = fDevice->getAddr32(x, y);
for (int i = count - 1; i >= 0; --i) {
@@ -125,6 +128,9 @@ void SkTransparentShader::shadeSpan(int x, int y, SkPMColor span[], int count) {
void SkTransparentShader::shadeSpan16(int x, int y, uint16_t span[], int count) {
SkASSERT(fDevice->getConfig() == SkBitmap::kRGB_565_Config);
- memcpy(span, fDevice->getAddr16(x, y), count << 1);
+ uint16_t* src = fDevice->getAddr16(x, y);
+ if (src != span) {
+ memcpy(span, src, count << 1);
+ }
}