diff options
author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-05-23 08:09:26 +0000 |
---|---|---|
committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-05-23 08:09:26 +0000 |
commit | c93e68161f78542d90b28b6cf9911b1de3788054 (patch) | |
tree | 673987236febe3d3bb2aac0977dbc35be3dc3d72 /src | |
parent | 7693dbf46e9bf0159cc9032059738d418469a7ad (diff) |
fix the visual diff of raster vs gpu -- vertices_80. The sw-raster is correct, all images are blurry.
While some images generated by gpu doesn't respect SkPaint's alpha value.
In gpu path, when pass SkPaint's alpha and color to GrPaint by SkPaint2GrPaintNoShader,
either alpha or colors can't not be passed. We can't pass both of them by the API.
Premultiply paint's alpha to colors's alpha in drawVertices, and pass colors to GrPaint.
The rendering result will respect colors in drawVertices, and the alpha value set in SkPaint as well.
BUG=skia:2592
R=bsalomon@google.com
Author: yunchao.he@intel.com
Review URL: https://codereview.chromium.org/292943002
git-svn-id: http://skia.googlecode.com/svn/trunk@14863 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src')
-rw-r--r-- | src/gpu/SkGpuDevice.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index ec471ecc68..431238b9db 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -1649,8 +1649,13 @@ void SkGpuDevice::drawVertices(const SkDraw& draw, SkCanvas::VertexMode vmode, if (NULL != colors) { // need to convert byte order and from non-PM to PM convertedColors.reset(vertexCount); + SkColor color; for (int i = 0; i < vertexCount; ++i) { - convertedColors[i] = SkColor2GrColor(colors[i]); + color = colors[i]; + if (paint.getAlpha() != 255) { + color = SkColorSetA(color, SkMulDiv255Round(SkColorGetA(color), paint.getAlpha())); + } + convertedColors[i] = SkColor2GrColor(color); } colors = convertedColors.get(); } |