Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(153)

Side by Side Diff: cc/output/gl_renderer.cc

Issue 394193003: Implement HiDPI and pinch-zoom scaling of filter params (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove extra headers; unneeded code in tests Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cc/layers/render_surface_impl.cc ('k') | cc/output/renderer_pixeltest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 The Chromium Authors. All rights reserved. 1 // Copyright 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/output/gl_renderer.h" 5 #include "cc/output/gl_renderer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
(...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after
626 626
627 // The indices for the line are stored in the same array as the triangle 627 // The indices for the line are stored in the same array as the triangle
628 // indices. 628 // indices.
629 GLC(gl_, gl_->DrawElements(GL_LINE_LOOP, 4, GL_UNSIGNED_SHORT, 0)); 629 GLC(gl_, gl_->DrawElements(GL_LINE_LOOP, 4, GL_UNSIGNED_SHORT, 0));
630 } 630 }
631 631
632 static SkBitmap ApplyImageFilter( 632 static SkBitmap ApplyImageFilter(
633 scoped_ptr<GLRenderer::ScopedUseGrContext> use_gr_context, 633 scoped_ptr<GLRenderer::ScopedUseGrContext> use_gr_context,
634 ResourceProvider* resource_provider, 634 ResourceProvider* resource_provider,
635 const gfx::Point& origin, 635 const gfx::Point& origin,
636 const gfx::Vector2dF& scale,
636 SkImageFilter* filter, 637 SkImageFilter* filter,
637 ScopedResource* source_texture_resource) { 638 ScopedResource* source_texture_resource) {
638 if (!filter) 639 if (!filter)
639 return SkBitmap(); 640 return SkBitmap();
640 641
641 if (!use_gr_context) 642 if (!use_gr_context)
642 return SkBitmap(); 643 return SkBitmap();
643 644
644 ResourceProvider::ScopedReadLockGL lock(resource_provider, 645 ResourceProvider::ScopedReadLockGL lock(resource_provider,
645 source_texture_resource->id()); 646 source_texture_resource->id());
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 skia::RefPtr<SkGpuDevice> device = 690 skia::RefPtr<SkGpuDevice> device =
690 skia::AdoptRef(SkGpuDevice::Create(backing_store->asRenderTarget())); 691 skia::AdoptRef(SkGpuDevice::Create(backing_store->asRenderTarget()));
691 DCHECK(device.get()); 692 DCHECK(device.get());
692 SkCanvas canvas(device.get()); 693 SkCanvas canvas(device.get());
693 694
694 // Draw the source bitmap through the filter to the canvas. 695 // Draw the source bitmap through the filter to the canvas.
695 SkPaint paint; 696 SkPaint paint;
696 paint.setImageFilter(filter); 697 paint.setImageFilter(filter);
697 canvas.clear(SK_ColorTRANSPARENT); 698 canvas.clear(SK_ColorTRANSPARENT);
698 699
699 // TODO(senorblanco): in addition to the origin translation here, the canvas
700 // should also be scaled to accomodate device pixel ratio and pinch zoom. See
701 // crbug.com/281516 and crbug.com/281518.
702 canvas.translate(SkIntToScalar(-origin.x()), SkIntToScalar(-origin.y())); 700 canvas.translate(SkIntToScalar(-origin.x()), SkIntToScalar(-origin.y()));
701 canvas.scale(scale.x(), scale.y());
703 canvas.drawSprite(source, 0, 0, &paint); 702 canvas.drawSprite(source, 0, 0, &paint);
704 703
705 // Flush the GrContext to ensure all buffered GL calls are drawn to the 704 // Flush the GrContext to ensure all buffered GL calls are drawn to the
706 // backing store before we access and return it, and have cc begin using the 705 // backing store before we access and return it, and have cc begin using the
707 // GL context again. 706 // GL context again.
708 use_gr_context->context()->flush(); 707 use_gr_context->context()->flush();
709 708
710 return device->accessBitmap(false); 709 return device->accessBitmap(false);
711 } 710 }
712 711
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
894 893
895 skia::RefPtr<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter( 894 skia::RefPtr<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter(
896 quad->background_filters, device_background_texture->size()); 895 quad->background_filters, device_background_texture->size());
897 896
898 SkBitmap filtered_device_background; 897 SkBitmap filtered_device_background;
899 if (apply_background_filters) { 898 if (apply_background_filters) {
900 filtered_device_background = 899 filtered_device_background =
901 ApplyImageFilter(ScopedUseGrContext::Create(this, frame), 900 ApplyImageFilter(ScopedUseGrContext::Create(this, frame),
902 resource_provider_, 901 resource_provider_,
903 quad->rect.origin(), 902 quad->rect.origin(),
903 quad->filters_scale,
904 filter.get(), 904 filter.get(),
905 device_background_texture.get()); 905 device_background_texture.get());
906 } 906 }
907 *background_changed = (filtered_device_background.getTexture() != NULL); 907 *background_changed = (filtered_device_background.getTexture() != NULL);
908 908
909 int filtered_device_background_texture_id = 0; 909 int filtered_device_background_texture_id = 0;
910 scoped_ptr<ResourceProvider::ScopedReadLockGL> lock; 910 scoped_ptr<ResourceProvider::ScopedReadLockGL> lock;
911 if (filtered_device_background.getTexture()) { 911 if (filtered_device_background.getTexture()) {
912 GrTexture* texture = 912 GrTexture* texture =
913 reinterpret_cast<GrTexture*>(filtered_device_background.getTexture()); 913 reinterpret_cast<GrTexture*>(filtered_device_background.getTexture());
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 1024
1025 if (cf && cf->asColorMatrix(color_matrix) && !filter->getInput(0)) { 1025 if (cf && cf->asColorMatrix(color_matrix) && !filter->getInput(0)) {
1026 // We have a single color matrix as a filter; apply it locally 1026 // We have a single color matrix as a filter; apply it locally
1027 // in the compositor. 1027 // in the compositor.
1028 use_color_matrix = true; 1028 use_color_matrix = true;
1029 } else { 1029 } else {
1030 filter_bitmap = 1030 filter_bitmap =
1031 ApplyImageFilter(ScopedUseGrContext::Create(this, frame), 1031 ApplyImageFilter(ScopedUseGrContext::Create(this, frame),
1032 resource_provider_, 1032 resource_provider_,
1033 quad->rect.origin(), 1033 quad->rect.origin(),
1034 quad->filters_scale,
1034 filter.get(), 1035 filter.get(),
1035 contents_texture); 1036 contents_texture);
1036 } 1037 }
1037 } 1038 }
1038 } 1039 }
1039 1040
1040 if (quad->shared_quad_state->blend_mode != SkXfermode::kSrcOver_Mode && 1041 if (quad->shared_quad_state->blend_mode != SkXfermode::kSrcOver_Mode &&
1041 background_texture) { 1042 background_texture) {
1042 filter_bitmap = 1043 filter_bitmap =
1043 ApplyBlendModeWithBackdrop(ScopedUseGrContext::Create(this, frame), 1044 ApplyBlendModeWithBackdrop(ScopedUseGrContext::Create(this, frame),
(...skipping 2152 matching lines...) Expand 10 before | Expand all | Expand 10 after
3196 context_support_->ScheduleOverlayPlane( 3197 context_support_->ScheduleOverlayPlane(
3197 overlay.plane_z_order, 3198 overlay.plane_z_order,
3198 overlay.transform, 3199 overlay.transform,
3199 pending_overlay_resources_.back()->texture_id(), 3200 pending_overlay_resources_.back()->texture_id(),
3200 overlay.display_rect, 3201 overlay.display_rect,
3201 overlay.uv_rect); 3202 overlay.uv_rect);
3202 } 3203 }
3203 } 3204 }
3204 3205
3205 } // namespace cc 3206 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/render_surface_impl.cc ('k') | cc/output/renderer_pixeltest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698