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

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

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « cc/output/filter_operations.cc ('k') | cc/output/output_surface.h » ('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 606 matching lines...) Expand 10 before | Expand all | Expand 10 after
617 GLC(gl_, gl_->LineWidth(quad->width)); 617 GLC(gl_, gl_->LineWidth(quad->width));
618 618
619 // The indices for the line are stored in the same array as the triangle 619 // The indices for the line are stored in the same array as the triangle
620 // indices. 620 // indices.
621 GLC(gl_, gl_->DrawElements(GL_LINE_LOOP, 4, GL_UNSIGNED_SHORT, 0)); 621 GLC(gl_, gl_->DrawElements(GL_LINE_LOOP, 4, GL_UNSIGNED_SHORT, 0));
622 } 622 }
623 623
624 static skia::RefPtr<SkImage> ApplyImageFilter( 624 static skia::RefPtr<SkImage> ApplyImageFilter(
625 scoped_ptr<GLRenderer::ScopedUseGrContext> use_gr_context, 625 scoped_ptr<GLRenderer::ScopedUseGrContext> use_gr_context,
626 ResourceProvider* resource_provider, 626 ResourceProvider* resource_provider,
627 const gfx::Point& origin, 627 const gfx::Rect& rect,
628 const gfx::Vector2dF& scale, 628 const gfx::Vector2dF& scale,
629 SkImageFilter* filter, 629 SkImageFilter* filter,
630 ScopedResource* source_texture_resource) { 630 ScopedResource* source_texture_resource) {
631 if (!filter) 631 if (!filter)
632 return skia::RefPtr<SkImage>(); 632 return skia::RefPtr<SkImage>();
633 633
634 if (!use_gr_context) 634 if (!use_gr_context)
635 return skia::RefPtr<SkImage>(); 635 return skia::RefPtr<SkImage>();
636 636
637 ResourceProvider::ScopedReadLockGL lock(resource_provider, 637 ResourceProvider::ScopedReadLockGL lock(resource_provider,
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 // Create surface to draw into. 686 // Create surface to draw into.
687 skia::RefPtr<SkSurface> surface = skia::AdoptRef( 687 skia::RefPtr<SkSurface> surface = skia::AdoptRef(
688 SkSurface::NewRenderTargetDirect(backing_store->asRenderTarget())); 688 SkSurface::NewRenderTargetDirect(backing_store->asRenderTarget()));
689 skia::RefPtr<SkCanvas> canvas = skia::SharePtr(surface->getCanvas()); 689 skia::RefPtr<SkCanvas> canvas = skia::SharePtr(surface->getCanvas());
690 690
691 // Draw the source bitmap through the filter to the canvas. 691 // Draw the source bitmap through the filter to the canvas.
692 SkPaint paint; 692 SkPaint paint;
693 paint.setImageFilter(filter); 693 paint.setImageFilter(filter);
694 canvas->clear(SK_ColorTRANSPARENT); 694 canvas->clear(SK_ColorTRANSPARENT);
695 695
696 canvas->translate(SkIntToScalar(-origin.x()), SkIntToScalar(-origin.y())); 696 // The origin of the filter is top-left and the origin of the source is
697 // bottom-left, but the orientation is the same, so we must translate the
698 // filter so that it renders at the bottom of the texture to avoid
699 // misregistration.
700 int y_translate = source.height() - rect.height() - rect.origin().y();
701 canvas->translate(-rect.origin().x(), y_translate);
697 canvas->scale(scale.x(), scale.y()); 702 canvas->scale(scale.x(), scale.y());
698 canvas->drawSprite(source, 0, 0, &paint); 703 canvas->drawSprite(source, 0, 0, &paint);
699 704
700 skia::RefPtr<SkImage> image = skia::AdoptRef(surface->newImageSnapshot()); 705 skia::RefPtr<SkImage> image = skia::AdoptRef(surface->newImageSnapshot());
701 if (!image || !image->getTexture()) { 706 if (!image || !image->getTexture()) {
702 return skia::RefPtr<SkImage>(); 707 return skia::RefPtr<SkImage>();
703 } 708 }
704 709
705 // Flush the GrContext to ensure all buffered GL calls are drawn to the 710 // 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 711 // backing store before we access and return it, and have cc begin using the
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 } 856 }
852 857
853 skia::RefPtr<SkImage> GLRenderer::ApplyBackgroundFilters( 858 skia::RefPtr<SkImage> GLRenderer::ApplyBackgroundFilters(
854 DrawingFrame* frame, 859 DrawingFrame* frame,
855 const RenderPassDrawQuad* quad, 860 const RenderPassDrawQuad* quad,
856 ScopedResource* background_texture) { 861 ScopedResource* background_texture) {
857 DCHECK(ShouldApplyBackgroundFilters(frame, quad)); 862 DCHECK(ShouldApplyBackgroundFilters(frame, quad));
858 skia::RefPtr<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter( 863 skia::RefPtr<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter(
859 quad->background_filters, background_texture->size()); 864 quad->background_filters, background_texture->size());
860 865
861 skia::RefPtr<SkImage> background_with_filters = 866 skia::RefPtr<SkImage> background_with_filters = ApplyImageFilter(
862 ApplyImageFilter(ScopedUseGrContext::Create(this, frame), 867 ScopedUseGrContext::Create(this, frame), resource_provider_, quad->rect,
863 resource_provider_, 868 quad->filters_scale, filter.get(), background_texture);
864 quad->rect.origin(),
865 quad->filters_scale,
866 filter.get(),
867 background_texture);
868 return background_with_filters; 869 return background_with_filters;
869 } 870 }
870 871
871 void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame, 872 void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame,
872 const RenderPassDrawQuad* quad) { 873 const RenderPassDrawQuad* quad) {
873 ScopedResource* contents_texture = 874 ScopedResource* contents_texture =
874 render_pass_textures_.get(quad->render_pass_id); 875 render_pass_textures_.get(quad->render_pass_id);
875 if (!contents_texture || !contents_texture->id()) 876 if (!contents_texture || !contents_texture->id())
876 return; 877 return;
877 878
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
963 SkColorFilter* colorfilter_rawptr = NULL; 964 SkColorFilter* colorfilter_rawptr = NULL;
964 filter->asColorFilter(&colorfilter_rawptr); 965 filter->asColorFilter(&colorfilter_rawptr);
965 cf = skia::AdoptRef(colorfilter_rawptr); 966 cf = skia::AdoptRef(colorfilter_rawptr);
966 } 967 }
967 968
968 if (cf && cf->asColorMatrix(color_matrix) && !filter->getInput(0)) { 969 if (cf && cf->asColorMatrix(color_matrix) && !filter->getInput(0)) {
969 // We have a single color matrix as a filter; apply it locally 970 // We have a single color matrix as a filter; apply it locally
970 // in the compositor. 971 // in the compositor.
971 use_color_matrix = true; 972 use_color_matrix = true;
972 } else { 973 } else {
973 filter_image = ApplyImageFilter(ScopedUseGrContext::Create(this, frame), 974 filter_image = ApplyImageFilter(
974 resource_provider_, 975 ScopedUseGrContext::Create(this, frame), resource_provider_,
975 quad->rect.origin(), 976 quad->rect, quad->filters_scale, filter.get(), contents_texture);
976 quad->filters_scale,
977 filter.get(),
978 contents_texture);
979 } 977 }
980 } 978 }
981 } 979 }
982 980
983 scoped_ptr<ResourceProvider::ScopedSamplerGL> mask_resource_lock; 981 scoped_ptr<ResourceProvider::ScopedSamplerGL> mask_resource_lock;
984 unsigned mask_texture_id = 0; 982 unsigned mask_texture_id = 0;
985 SamplerType mask_sampler = SamplerTypeNA; 983 SamplerType mask_sampler = SamplerTypeNA;
986 if (quad->mask_resource_id) { 984 if (quad->mask_resource_id) {
987 mask_resource_lock.reset(new ResourceProvider::ScopedSamplerGL( 985 mask_resource_lock.reset(new ResourceProvider::ScopedSamplerGL(
988 resource_provider_, quad->mask_resource_id, GL_TEXTURE1, GL_LINEAR)); 986 resource_provider_, quad->mask_resource_id, GL_TEXTURE1, GL_LINEAR));
(...skipping 1715 matching lines...) Expand 10 before | Expand all | Expand 10 after
2704 } else { 2702 } else {
2705 SetStencilEnabled(false); 2703 SetStencilEnabled(false);
2706 } 2704 }
2707 } 2705 }
2708 2706
2709 bool GLRenderer::BindFramebufferToTexture(DrawingFrame* frame, 2707 bool GLRenderer::BindFramebufferToTexture(DrawingFrame* frame,
2710 const ScopedResource* texture, 2708 const ScopedResource* texture,
2711 const gfx::Rect& target_rect) { 2709 const gfx::Rect& target_rect) {
2712 DCHECK(texture->id()); 2710 DCHECK(texture->id());
2713 2711
2712 // Explicitly release lock, otherwise we can crash when try to lock
2713 // same texture again.
2714 current_framebuffer_lock_ = nullptr; 2714 current_framebuffer_lock_ = nullptr;
2715 2715
2716 SetStencilEnabled(false); 2716 SetStencilEnabled(false);
2717 GLC(gl_, gl_->BindFramebuffer(GL_FRAMEBUFFER, offscreen_framebuffer_id_)); 2717 GLC(gl_, gl_->BindFramebuffer(GL_FRAMEBUFFER, offscreen_framebuffer_id_));
2718 current_framebuffer_lock_ = 2718 current_framebuffer_lock_ =
2719 make_scoped_ptr(new ResourceProvider::ScopedWriteLockGL( 2719 make_scoped_ptr(new ResourceProvider::ScopedWriteLockGL(
2720 resource_provider_, texture->id())); 2720 resource_provider_, texture->id()));
2721 unsigned texture_id = current_framebuffer_lock_->texture_id(); 2721 unsigned texture_id = current_framebuffer_lock_->texture_id();
2722 GLC(gl_, 2722 GLC(gl_,
2723 gl_->FramebufferTexture2D( 2723 gl_->FramebufferTexture2D(
(...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after
3305 context_support_->ScheduleOverlayPlane( 3305 context_support_->ScheduleOverlayPlane(
3306 overlay.plane_z_order, 3306 overlay.plane_z_order,
3307 overlay.transform, 3307 overlay.transform,
3308 pending_overlay_resources_.back()->texture_id(), 3308 pending_overlay_resources_.back()->texture_id(),
3309 overlay.display_rect, 3309 overlay.display_rect,
3310 overlay.uv_rect); 3310 overlay.uv_rect);
3311 } 3311 }
3312 } 3312 }
3313 3313
3314 } // namespace cc 3314 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/filter_operations.cc ('k') | cc/output/output_surface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698