Index: cc/output/gl_renderer.cc |
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc |
index 12520a51d6bcfb687c25892864d3386c9e077669..26d5272910ba96298a17bebf81bb4859592dfb10 100644 |
--- a/cc/output/gl_renderer.cc |
+++ b/cc/output/gl_renderer.cc |
@@ -665,7 +665,8 @@ static sk_sp<SkImage> ApplyImageFilter( |
const Resource* source_texture_resource, |
SkIPoint* offset, |
SkIRect* subset, |
- bool flip_texture) { |
+ bool flip_texture, |
+ const gfx::PointF& origin) { |
if (!filter || !use_gr_context) |
return nullptr; |
@@ -683,8 +684,9 @@ static sk_sp<SkImage> ApplyImageFilter( |
} |
SkMatrix local_matrix; |
- local_matrix.setTranslate(-src_rect.x(), -src_rect.y()); |
+ local_matrix.setTranslate(origin.x(), origin.y()); |
local_matrix.postScale(scale.x(), scale.y()); |
+ local_matrix.postTranslate(-src_rect.x(), -src_rect.y()); |
SkIRect clip_bounds = gfx::RectFToSkRect(dst_rect).roundOut(); |
clip_bounds.offset(-src_rect.x(), -src_rect.y()); |
@@ -1071,9 +1073,10 @@ void GLRenderer::DrawRenderPassQuadInternal( |
bool GLRenderer::InitializeRPDQParameters( |
DrawRenderPassDrawQuadParams* params) { |
const RenderPassDrawQuad* quad = params->quad; |
- SkMatrix scale_matrix; |
- scale_matrix.setScale(quad->filters_scale.x(), quad->filters_scale.y()); |
- gfx::Rect dst_rect = quad->filters.MapRect(quad->rect, scale_matrix); |
+ SkMatrix local_matrix; |
+ local_matrix.setTranslate(quad->filters_origin.x(), quad->filters_origin.y()); |
+ local_matrix.postScale(quad->filters_scale.x(), quad->filters_scale.y()); |
+ gfx::Rect dst_rect = quad->filters.MapRect(quad->rect, local_matrix); |
params->dst_rect.SetRect(static_cast<float>(dst_rect.x()), |
static_cast<float>(dst_rect.y()), |
static_cast<float>(dst_rect.width()), |
@@ -1217,7 +1220,8 @@ bool GLRenderer::UpdateRPDQWithSkiaFilters( |
params->filter_image = ApplyImageFilter( |
ScopedUseGrContext::Create(this), resource_provider_, src_rect, |
params->dst_rect, quad->filters_scale, std::move(filter), |
- params->contents_texture, &offset, &subset, params->flip_texture); |
+ params->contents_texture, &offset, &subset, params->flip_texture, |
+ quad->filters_origin); |
if (!params->filter_image) |
return false; |
params->dst_rect = |